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 注释。