目前我在RESTful服务中为不同方法启用UTF-8作为@Consumes(“application / xml; charset = utf-8”)。我很想知道是否可以通过单个配置更改为所有REST服务更改此设置。我们正在使用CXF,也许它提供了什么?
由于 拉维
答案 0 :(得分:1)
第一个问题是您确定要阻止任何其他资源接受非UTF-8实体吗?这样一个全面的宣言感觉它可能会给你带来麻烦。
我承认我没有使用过CXF,所以我不能说这些细节。但是我可以在JAX-RS和Servlet API下考虑一个选项,这可能与你想要完成的任务有关。
使用Servlet API:根据您部署应用程序的方式,您可以创建并注入servlet filter。在doFilter方法中,您可以检查请求实体的编码并继续到过滤器链的下一部分(最终到其余应用程序)。如果在请求中发送了不正确的实体,您只需在响应中设置适当的HTTP 415状态,而不是调用您的其余应用程序。
使用JAX-RS:根据您在资源中解析/接受实体主体的方式,您可以创建并注入自定义MessageBodyReader实现。这个读者可以解析你的实体,确保它只是UTF-8,否则抛出适当的异常。