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.