JAX-RS POJO для JSON не работает с 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 в класс Recipe, это также будет работать для json.

Моя старая установка с java-ee 7 и payara 4 работала нормально без геттеров / сеттеров. Я только изменил на java-ee 8 и payara 5, и он больше не работает, мне не хватает какой-то конфигурации? Не должен ли @XmlAccessorType(XmlAccessType.FIELD) устранить необходимость использования методов получения / установки?

1 ответ

Решение

Вам нужно добавить аннотации http://json-b.net/ (JSON-B) к Recipe учебный класс. Это предпочтительный стандартный способ сопоставления классов Java с JSON в Java EE 8.

В Java EE 7 не было стандартного способа сопоставления объектов Java с JSON. Некоторые серверы приложений, включая Payara 4, могут переводить аннотации JAX-B в JSON. Но это не стандартно и не работает все время, потому что аннотации, такие как @XmlRootElement предназначены для отображения объектов Java в XML, а не в JSON.

Payara 5 использует новый API JSON-B для сопоставления с JSON и игнорирует аннотации XML.

Другие вопросы по тегам