我有一个带有简单REST服务的JavaEE应用程序,我想支持内容类型application/json
和application/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;
// ...
}