JAX-RS POJO到json不适用于payara 5

时间:2018-04-14 20:15:37

标签: java-ee jax-rs payara

我有以下实体:

@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的必要性吗?

1 个答案:

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