복붙노트

[SPRING] JBoss resteasy - 사용자 지정 Jackson 공급자

SPRING

JBoss resteasy - 사용자 지정 Jackson 공급자

스프링 부트 애플리케이션에서 JBoss resteasy를 사용하고 있습니다. 아래 사용자 정의 JasonProvider로 구성하고 com.fasterxml.jackson을 사용하십시오.

    @Provider
    @Priority(value=1)
    @Consumes({ "application/*+json", "text/json" })
    @Produces({ "application/*+json", "text/json" })
    public class JsonProvider extends JacksonJsonProvider {

      public static final PeriodFormatter STANDARD_ISO_PERIOD_FORMAT = ISOPeriodFormat.standard();

        public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().configure(WRITE_DATES_AS_TIMESTAMPS, false).configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
                    .setDateFormat(ISO8601_WITH_MILLIS);

    static {
            final SimpleModule module = new SimpleModule("JsonProviderModule", new Version(1, 0, 0, null, null, null));
            module.addSerializer(Date.class, new DateSerializer());
            module.addDeserializer(Date.class, new DateDeserializer());

            OBJECT_MAPPER.registerModule(module);
        }

   public JsonProvider() {
        super(OBJECT_MAPPER);
    }
}

내 클라이언트 코드에서,

    final Client client = factory.getClient();
    client.register(jsonProvider);

jsonProvider가 등록되어 있지만 전화를 걸면 내 jsonProvider를 호출하지 않습니다.

그것은 resteasy 버전 3.0.14.finial과 함께 잘 작동했습니다.

최근에 3.1.4로 업그레이드되었습니다. 최종 및 몇 가지 다른 항아리도 있습니다. 최신 버전의 사용자 정의 JsonProvider를 사용하지 않는 이유를 잘 모릅니다.

등록 할 다른 방법이 있습니까?

관련 pom 항목,

<dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson2-provider</artifactId>
            <version>3.1.4.Final</version>
        </dependency>

<dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-validator-provider-11</artifactId>
            <version>3.1.4.Final</version>
        </dependency>

유효성을 검사 할 다른 POM 충돌이 있습니까?

감사

해결법

  1. ==============================

    1."application / json"을 다른 주석과 함께 추가하면 문제가 해결됩니다.

    "application / json"을 다른 주석과 함께 추가하면 문제가 해결됩니다.

    @Provider
    @Consumes({ "application/json","application/*+json", "text/json" })
    @Produces({ "application/json","application/*+json", "text/json" })
    public class JsonProvider extends JacksonJsonProvider {
    

    Spring은 match와 weightage에 기반하여 우선 순위를 설정한다. 기본 JsonProvider는 버전 3.1.0에서 "application / json"주석을 추가 했으므로 기본 공급자가 우선 적용되므로 "application / json"을 사용자 지정 JsonProvider에 추가하면 문제가 해결되었습니다.

  2. from https://stackoverflow.com/questions/47838240/jboss-resteasy-custom-jackson-provider by cc-by-sa and MIT license