Как мне go зарегистрировать jackson-datatype-joda на REST-сервере glassfi sh / payara - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть конечная точка REST в контейнере (Payara 4)
Я добавил зависимость в pom. xml для расширения сериализации joda.

<dependency>
     <groupId>com.fasterxml.jackson.datatype</groupId>
     <artifactId>jackson-datatype-joda</artifactId>
     <version>2.10.3</version>
</dependency>

Но я получаю предметы неправильно сериализовано.

"dt":{"chronology":{},"millis":1499896800000}

Я знаю, что мне нужно использовать jackson-databind-joda, но я не уверен, как правильно зарегистрировать его в скумбриевидный гидролик . Есть примеры для Spring Boot, но не для более старых серверов приложений?

@Path("bom")
@Stateless
public class ProductionMaterialRestEndpoint {

    @POST
    @Path("kw/compare/{year}/{week}")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public ResultContainingDateTime compare(
            @PathParam("year") int year,
            @PathParam("week") int week) throws IOException, ExecutionException {

            ...               
    }    
}


public class ResultContainingDataTime {
    private org.joda.time.DateTime dt;
}

как мне зарегистрировать модуль сериализатора joda с помощью сериализатора, встроенного в PAYARA / GLASSFI SH

1 Ответ

0 голосов
/ 29 апреля 2020

JAX-RS - это в основном спецификация о том, как писать веб-сервисы REST в Java EE. Он не указывает, какая технология используется для сериализации сообщений, а только интерфейс MessageBodyReader и MessageBodyReader.

Если вы используете Java EE 8, вы получите JSON -B (Binding), который обеспечивает JSON сериализацию "из коробки". Если вы хотите использовать вместо этого Jackson, вам необходимо настроить его ( Как использовать Jackson 2 в Payara 5? ). Кроме того, вы не получаете автоматическую конфигурацию модулей Джексона по умолчанию (например, Java Time, Joda Time), как для Spring Boot, и вам приходится самостоятельно регистрировать их для ObjectMapper.

Если ваш код использует Java 8 и Java EE 8, вы также можете использовать классы java.time, такие как LocalDateTime, Instant, et c. и используйте аннотации JSON -B, чтобы указать, как вы хотите сериализовать эти значения, используя @JsonbDateFormat

...