我有以下实体:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Recipe {
private String title;
private int preparationTime;
public Recipe() {
}
public Recipe(String title, int preparationTime) {
this.title = title;
this.preparationTime = preparationTime;
}
}
和资源:
@Path("recipes")
@Stateless
public class RecipesResource {
@GET
public Recipe getRecipe() {
return new Recipe("cake", 120);
}
}
请求application / xml工作正常,我得到一个xml对象返回。请求application / json而不是给我一个空的json对象。如果我将getter / setter添加到Recipe类,它也适用于json。
我使用java-ee 7和payara 4的旧设置在没有getter / setter的情况下工作正常。我只改为java-ee 8和payara 5而且它不再起作用,我错过了一些配置吗? @XmlAccessorType(XmlAccessType.FIELD)不应该删除getter / setter的必要性吗?
答案 0 :(得分:3)
您需要将http://json-b.net/(JSON-B)注释添加到Recipe
类。这是将Java类映射到JSONin Java EE 8的首选标准方法。
在Java EE 7中,没有标准方法如何将Java对象映射到JSON。一些应用程序服务器(包括Payara 4)可以将JAX-B注释转换为JSON。但它不是标准的,并且不能一直工作,因为像@XmlRootElement
这样的注释意味着将Java对象映射到XML而不是JSON。
Payara 5使用新的JSON-B API映射到JSON并忽略XML注释。