json 的 JAX-RS POJO 不适用于 payara 5
JAX-RS POJO to json does not work with payara 5
我有以下实体:
@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 添加到食谱 class,它也适用于 json。
我使用 java-ee 7 和 payara 4 的旧设置在没有 getter/setter 的情况下工作正常。我只更改为 java-ee 8 和 payara 5,它不再工作了,我是不是缺少一些配置? @XmlAccessorType(XmlAccessType.FIELD) 不应该删除 getters/setters 的必要性吗?
您需要为 Recipe
class 添加 (JSON-B) 注释。这是将 Java classes 映射到 Java EE 8 中的 JSON 的首选标准方法。
在 Java EE 7 中,没有如何将 Java 对象映射到 JSON 的标准方法。一些应用服务器,包括 Payara 4,可以将 JAX-B 注释翻译成 JSON。但它不是标准的,也不是一直有效,因为像 @XmlRootElement
这样的注释是为了将 Java 对象映射到 XML 而不是 JSON.
Payara 5 使用新的 JSON-B API 映射到 JSON 并忽略 XML 注释。
我有以下实体:
@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 添加到食谱 class,它也适用于 json。
我使用 java-ee 7 和 payara 4 的旧设置在没有 getter/setter 的情况下工作正常。我只更改为 java-ee 8 和 payara 5,它不再工作了,我是不是缺少一些配置? @XmlAccessorType(XmlAccessType.FIELD) 不应该删除 getters/setters 的必要性吗?
您需要为 Recipe
class 添加 (JSON-B) 注释。这是将 Java classes 映射到 Java EE 8 中的 JSON 的首选标准方法。
在 Java EE 7 中,没有如何将 Java 对象映射到 JSON 的标准方法。一些应用服务器,包括 Payara 4,可以将 JAX-B 注释翻译成 JSON。但它不是标准的,也不是一直有效,因为像 @XmlRootElement
这样的注释是为了将 Java 对象映射到 XML 而不是 JSON.
Payara 5 使用新的 JSON-B API 映射到 JSON 并忽略 XML 注释。