programing

Spring 4.1까지 사용 중인 Jackson Object Mapper를 입수하려면 어떻게 해야 합니까?

yellowcard 2023. 3. 16. 21:16
반응형

Spring 4.1까지 사용 중인 Jackson Object Mapper를 입수하려면 어떻게 해야 합니까?

Spring 4.1은 Jackson을 인스턴스화합니다.ObjectMapper사례.하고 싶은 이유가 있다@Autowire이 인스턴스를 컨트롤러 중 하나에 넣습니다.컨트롤러는 Jackson을 사용하여 독자적인 마이너 JSON 해석을 수행합니다만,ObjectMapperSpring 자체에서 사용하는 것과 동일한 인스턴스여야 합니다.어떻게 하면 그것을 달성할 수 있을까요?

커스텀 설정 방법은 묻지 않습니다.ObjectMapperSpring에 의해 사용되고 있습니다.기본값으로 만족합니다.Spring out에서 사용하는 인스턴스를 피싱하여 기존 인스턴스를 자체 코드로 재사용할 수 있도록 합니다.

클래스 패스로 잭슨과 함께 Spring Boot을 사용하고 REST 컨트롤러의 JSON 해석에 대한 기본 구현을 사용하는 경우 다음과 같이 하십시오.

@Autowired
private ObjectMapper jacksonObjectMapper;

다른 사람들이 말했듯이, 당신은 할 수 없다.@Autowired컨트롤러에 직접 연결할 수 있습니다.

@Emerson Farrugia가 제안하는 새로운 인스턴스 작성 방법

Jackson2ObjectMapperBuilder.json().build()

또, 취득한 인스턴스가, 다음의 인스톨을 따르지 않았기 때문에, 나에게도 효과가 없었습니다.spring.jackson.*필요한 구성 속성입니다.


제가 찾은 해결책은 스프링스로부터 ObjectMapper를 얻는 것이었습니다.MappingJackson2HttpMessageConverter주사할 수 있습니다.

그래서 전원을 껐습니다.

@Autowired
private MappingJackson2HttpMessageConverter springMvcJacksonConverter;

오브젝트 맵퍼를 다음과 같이 가져옵니다.

ObjectMapper objectMapper = springMvcJacksonConverter.getObjectMapper();

이 인스턴스는 Spring MVC 자체 메시지 변환과 동일하게 동작합니다.어차피 같은 인스턴스일 수 있습니다.

보시면MappingJackson2HttpMessageConverter새로운 테크놀로지가 생성됩니다.ObjectMapper콩으로 노출되지는 않습니다.겟터가 있긴 한데, 내가 과거에 알아낸 유일한 방법은 내가 그 겟터를 만들었을 때야.MappingJackson2HttpMessageConverter나 자신, 예를 들면.

public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

        MappingJackson2HttpMessageConverter jacksonMessageConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = jacksonMessageConverter.getObjectMapper();

        objectMapper.registerModule(new JodaModule());
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);

        converters.add(jacksonMessageConverter);
    }
}

Spring Boot를 사용하는 경우 매뉴얼에 다음 중 하나를 사용하는 데 특화된 섹션이 있습니다.ObjectMapper기본값을 생성하는 경우Jackson2ObjectMapperBuilder @Bean, 같은 것을 자동 접속할 수 있습니다.ObjectMapperinstance를 설정합니다.

ObjectMapper작성자Jackson2ObjectMapperBuilder다음 명령을 사용하여 빌더를 삽입할 수 있습니다.

@Autowired
private Jackson2ObjectMapperBuilder mapperBuilder;

그 후 사용mapperBuilder.build()건물을 짓다ObjectMapperinstance 및 이 instance는 configuration을 사용할 수 있습니다.application.properties공식 의사 선생님입니다

Spring Boot의 소스 코드를 디버깅한 결과 컨텍스트 전체를 실행할 때만Jackson2ObjectMapperBuilder에 삽입한 설정이 포함됩니다.application.yml.

즉, JUnit 5를 사용한Spring Boot 테스트에서 Object Mapper를 생성하려면 다음 작업을 수행해야 합니다.

@ExtendWith(SpringExtension.class)
@SpringBootTest
class SomeTest {
    @Autowired
    private Jackson2ObjectMapperBuilder builder;
    ...

    @Test
    void testObjectMapper() {
        ObjectMapper mapper = builder.build();


    }

만 만들 수 .@SpringBootTest(classes = Jackson2ObjectMapperBuilder.class)을 사용하다

?bootRun우린 이 문제가 없어

은, 「아니다」로 설정되어 .Jackson2ObjectMapperBuilderCustomizerConfiguration#customize(Jackson2ObjectMapperBuilder builder)★★★★★★ 。

여기에 이미지 설명 입력

@Autowire the MappingJackson2 MappingJackson2" @Autowire " "Http Message Converter" "Http Message Converter" "Http Message Converter" " 음음음음 when when when when when when when when when when when when when when when when when when 。No qualifying bean of type 'org.springframework.http.converter.json.MappingJackson2HttpMessageConverter' available: expected single matching bean but found 4: mappingJackson2HttpMessageConverter,jacksonHttpMessageConverter,halJacksonHttpMessageConverter,alpsJsonHttpMessageConverter.

중 .변수명을 위 중 하나로 변경하면 해당 인스턴스를 얻을 수 있습니다.@Autowired private MappingJackson2HttpMessageConverter halJacksonHttpMessageConverter;

Spring 4.3 업데이트:

  • Spring 4.3부터는 컨스트럭터가 1개인 클래스에서 @Autowired 주석을 생략할 수 있습니다.
  • 따라서 ObjectMapper 파라미터를 사용하는 컨스트럭터를 추가하면 @Autowired 주석을 사용할 필요 없이 잭슨 ObjectMapper 인스턴스와 함께 자동으로 연결됩니다.

괜찮으시다면, 2단계 음료수입니다.

  1. you at your ★★★★★★★ ★★★@SpringBootApplication 추가, 추가:

    @Bean
    public ObjectMapper mapper() {
      return new ObjectMapper();
    }
    
  2. 하시는 곳 어디든지ObjectMapper:

    @Autowired
    ObjectMapper mapper;
    

피스!

언급URL : https://stackoverflow.com/questions/30060006/how-do-i-obtain-the-jackson-objectmapper-in-use-by-spring-4-1

반응형