Spring Boot 1.4에서 잭슨을 커스터마이즈하는 방법
잭슨의 기능을 커스터마이즈하기 위해 스프링 부트 1.4에서 Jackson2ObjectMapperBuilderCustomizer.java를 사용하는 예를 찾을 수 없었습니다.
부트 1.4에서 잭슨을 커스터마이즈하기 위한 doco - https://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/ #how-to-to-the-boot-object-mapper
Jackson2ObjectMapperBuilderCustomizer.java를 사용하여 오브젝트 매퍼를 커스터마이즈하는 것이 올바른 방법인지 확실하지 않지만 구성이 작동합니다.
@Configuration
public class JacksonAutoConfiguration {
@Autowired
private Environment env;
@Bean
public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder(
List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
Jackson2ObjectMapperBuilder builder = configureObjectMapper();
customize(builder, customizers);
return builder;
}
private void customize(Jackson2ObjectMapperBuilder builder,
List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) {
customizer.customize(builder);
}
}
private Jackson2ObjectMapperBuilder configureObjectMapper() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
List<String> activeProfiles = asList(env.getActiveProfiles());
if (activeProfiles.contains(SPRING_PROFILE_DEVELOPMENT)) {
builder.featuresToEnable(SerializationFeature.INDENT_OUTPUT);
}
return builder;
}
}
콘텍스트를 제공하기 위해 이 클래스는 ControllerAdvice나 위와 같은 몇 가지 사소한 기능 등 많은 것을 자동 설정하는 REST 서비스용 스프링 스타터 프로젝트에 포함되어 있습니다.
그 때문에, 기동이나 다른 패키지에 의해서 제공되는 설정을 덮어쓰기 하는 것이 아니라, 잭슨 설정을 확장하는 것이 목표입니다.
잭슨을 커스터마이즈하려면ObjectMapper이미 Spring Boot에 의해 사전 설정되어 있기 때문에 이 작업을 수행할 수 있습니다(이 예에서는 커스텀 디시리얼라이저를 추가합니다).
구성 클래스:
@SpringBootConfiguration
public class Application {
@Autowired
private BigDecimalDeserializer bigDecimalDeserializer;
...
@Bean
public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.deserializerByType(BigDecimal.class, bigDecimalDeserializer);
}
};
}
...
}
그리고 제 맞춤 탈시리얼라이저는 스프링에 의해 어떻게 인식되는지를 보여주기 위해:
@Component
public class BigDecimalDeserializer extends StdDeserializer<BigDecimal> {
public BigDecimalDeserializer() {
super(BigDecimal.class);
}
@Override
public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
...
}
...
}
당신이 무엇을 하려고 하는가에 달렸어요.
디폴트로 실행되는 커스터마이즈 외에 몇 가지 커스터마이즈를 하고 싶은 경우는, 독자적인 커스터마이즈를 작성할 필요가 있습니다.Jackson2ObjectMapperBuilderCustomizer구현하여 빈칸으로 노출합니다.현재 사용하고 있는 것은 보다 복잡한 버전입니다.커스터마이저를 삽입하고 직접 호출하는 대신, 사용자 고유의 커스터마이저 빈을 만들면 Boot이 대신 호출합니다.
Boot의 모든 커스터마이즈를 완전히 제어하고 끄려면Jackson2ObjectMapperBuilder또는ObjectMapperbean을 지정하여 필요에 따라 설정합니다.이 빌더는 Spring Data REST 등의 다른 컴포넌트에 의해 작성된 ObjectMapper 구성에도 사용되므로 빌더 접근법이 선호됩니다.
코드를 확인하고 한 걸음 물러서면 프로파일 고유의 설정 파일(예:application-dev.propertiesJackson 출력의 들여쓰기를 활성화합니다.자세한 내용은 여기를 참조하십시오.
작성만 하면 됩니다.ObjectMapper콩:
@Bean
ObjectMapper objectMapper() {
return Jackson2ObjectMapperBuilder
.json()
.featuresToEnable(MapperFeature.DEFAULT_VIEW_INCLUSION)
.build();
}
언급URL : https://stackoverflow.com/questions/39263553/how-to-customise-jackson-in-spring-boot-1-4
'programing' 카테고리의 다른 글
| 떠다니는 아이디브를 억지로 포함시키다 (0) | 2023.03.19 |
|---|---|
| 폐지 경고: 컬렉션.findAndModify는 권장되지 않습니다.대신 findOneAndUpdate, findOneAndReplace 또는 findOneAndDelete를 사용하시겠습니까? (0) | 2023.03.19 |
| 사용자 정의 도메인을 openstime wordpress 블로그에 매핑 (0) | 2023.03.19 |
| react.js에서의 setState와 replaceState의 비교 (0) | 2023.03.19 |
| ng-disabled 행의 경우 (0) | 2023.03.19 |