Jax-RS内容类型优先级

时间:2015-07-31 18:07:47

标签: rest jersey jax-rs java-ee-7

我有一个带有简单REST服务的JavaEE应用程序,我想支持内容类型application/jsonapplication/xml。当客户端发送带有其中一种内容类型的Accept标头时,一切都按预期工作。

但是当缺少此标题时,我想以 application/json作为默认值来回答,但无论我到目前为止尝试过什么,都会使用application/xml

配置类

@ApplicationPath("api")
public class ApplicationConfig extends Application {
}

服务类

@Path("users")
public class UserResource {
    @Path("/{username}")
    @GET
    // The following variants didn't change the behaviour:
    // @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    // @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML + ";q=0.5"})
    // @Produces({MediaType.APPLICATION_JSON + ";q=1.0", MediaType.APPLICATION_XML + ";q=0.5"})
    // @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML + ";qs=0.5"})
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public User userDetails(@PathParam("username") final String username) {
        return new User();
    }
}

(生成)用户类

我正在返回的类(maven-jaxb2-plugin)使用JAXB注释来支持XML而无需进一步配置:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User", propOrder = {
    "username"
})
@XmlRootElement(name = "user")
public class User
    implements Serializable, Equals, HashCode
{
    private final static long serialVersionUID = 1701L;
    @XmlElement(required = true)
    protected String username;
    // ...
}

更多信息

  • JavaEE 7
  • Java 8
  • 与Glassfish 4.1和Wildfly 9.0.1相同的行为

0 个答案:

没有答案