Перенос Jackson JSON из Wildfly в Tomee

Учитывая этот класс, аннотированный Джексоном:

public class ResponseMsg implements Serializable{
    
    public ResponseMsg(String ret, String msg){
        this.returnCode = ret;
        this.errorMsg = msg;
    }
    
    @JsonProperty("ret")
    private int returnCode;
    
    @JsonProperty("msg")
    private String errorMessage;

    // .... getters and setters
}

У меня этот класс отлично работает в Wildfly 26, он возвращает ответ JSON с аннотированными атрибутами ResponseMsg:

@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response processMessage() {

    @POST
    @Path("/proc")
    public Response process() {
        ResponseMsg er = new ResponseMsg("abc","some message");
        return Response.ok(er).build();
    }

 }

Поскольку он аннотирован JsonProperty, я получаю в браузере, как и ожидалось:

{ "ret": "abc", "msg": "some message" }

Теперь я перехожу на Tomee с Jakarta EE 9.1, и тот же код возвращает ResponseMsg, но без аннотированных свойств, JSON выглядит так:

{ "returnCode": "abc", "errorMessage": "some message" }

Чего-то не хватает в конфигурации Tomee, что это?

FWIW WildFly 27 реализует Jakarta EE 10, и вы можете включить поддержку Jackson для REST.

James R. Perkins 05.04.2023 17:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно Джакартской документации,

https://jakarta.ee/specifications/jsonb/2.0/jakarta-jsonb-spec-2.0.html#customizing-property-names

Существует два стандартных способа настройки сериализации поля. (или свойство JavaBean) в документ JSON. То же самое относится к десериализация. Первый способ — аннотировать поле (или JavaBean свойство) с аннотацией jakarta.json.bind.annotation.JsonbProperty. Второй вариант - установить jakarta.json.bind.config.PropertyNamingStrategy.

Вам нужно использовать аннотацию @JsonBProperty вместо JsonProperty, которую вы используете.

import jakarta.json.bind.annotation.JsonbProperty;

Мое приложение большое и сложное, и в нем широко используется Джексон, то, что я задал в вопросе, является просто примером, нет возможности использовать Джексона с Jakarta EE?

ps0604 05.04.2023 14:58

Я думаю, вам нужно будет изменить их, если вы хотите использовать JakartaEE. Вы также можете заглянуть на github.com/FasterXML/jackson-jakarta-rs-providers и посмотреть, поможет ли это в любом случае?

JCompetence 05.04.2023 16:03

Я не нашел способа сохранить код без изменений, спасибо за направление

ps0604 05.04.2023 17:28

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