如何获取 REST 请求的请求内容类型?

Bas*_*nck 3 java rest jax-rs jaxb

使用 JAXB 实现 REST-Web 服务,我们有几种方法可以产生输出。

包含所有这些方法的类用@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }). 如果请求通过了happy-path(没有发生错误),我们会在我们的方法中返回POJO,并且JAXB 会动态地将这些对象编组到application/xmlor 中application/json,因为客户端通过Accept: application/xxx;请求标头中的方式请求它。

我的问题是如何获取请求的内容类型,因为如果发生错误,我们将抛出WebApplicationException一个响应,其中应包含格式化为请求的内容类型的自定义错误消息。

Pau*_*tha 7

你可以...

注入 @HeaderParam("Accept")

public Response doSomething(@HeaderParam("Accept") String accept) {
    // you may need to parse it as the value is not always as
    // simple as application/json
}
Run Code Online (Sandbox Code Playgroud)

你可以...

Inject HttpHeaders,你有几个选择

public Response doSomething(@Context HttpHeaders headers) {
    String accept = headers.getHeaderString(HttpHeaders.ACCEPT);
    List<MediaType> acceptableType = headers.getAcceptableMediaTypes();
}
Run Code Online (Sandbox Code Playgroud)