2015-04-22 231 views
4

我正在使用spring-boot,並且想要自定義創建的ObjectMapper。Jackson2ObjectMapperBuilder啓用字段可見性任何

我想要做的就是能夠序列化沒有getter或setter的對象。在這之前可以通過在ObjectMapper上放置JsonAutoDetect.Visibility.ANY來完成。

但是我如何使用Jackson2ObjectMapperBuilder bean啓用此功能?我目前正在公開?

回答

8

您可以使用Jackson2ObjectMapperBuilder子類覆蓋configure(ObjectMapper)方法:即春季啓動提供

@Bean 
public Jackson2ObjectMapperBuilder objectMapperBuilder() { 
    return new Jackson2ObjectMapperBuilder() { 

     @Override 
     public void configure(ObjectMapper objectMapper) { 
      super.configure(objectMapper); 
      objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); 
     } 

    }; 

} 
+0

應用程序無法從引導1.4.0開始, java.lang.NullPointerException:null \t at org.springframework.data.rest.core.UriToEntityConverter。 (UriToEntityConverter.java:71)〜[spring-data-rest-core-2.5.2.RELEASE.jar:na]' – xenoterracide

+0

在此之前...'PersistentEntity entity = entities.getPersistentEntity(rawType) ;''其中'rawType'是'JsonDeserializer' ... – xenoterracide

+0

它似乎只是作爲將Jackson20bjectMapperBuilder定義爲子類的結果而發生的 – xenoterracide

5

如果你想保持ObjectMapper通過spring.jackson配置*屬性,那麼你最好不要定義您自己的Jackson2ObjectMapperBuilder bean(有關詳細信息,請在JacksonAutoConfiguration類中檢查JacksonObjectMapperBuilderConfiguration)。

你可以做的,而不是是這樣的:

@Bean 
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder mapperBuilder) { 
    return mapperBuilder.build().setVisibility(PropertyAccessor.FIELD, Visibility.ANY); 
} 
+0

我不得不排除HypermediaAutoConfiguration以使此解決方案起作用,請參見[SpringFox依賴性破壞我的Spring上下文](http://stackoverflow.com/questions/31307883/springfox-dependency-breaking-my-spring-context/32281734#32281734) – 0xced

0

我花了一天半的使用不同的設置來發揮。 所以我設法解決它(1.3.2.RELEASE)時:

  • 我簡單@Configuration註釋的配置類(而不是從WebMvcConfigurerAdapter擴展)
  • 配置傑克遜我沒有@EnableWebMvc

然後Jackson2ObjectMapperBuilder objectMapperBuilder解決方案是 工作,但在spring.jackson.serialization.indent_output: true屬性被忽略。

我終於完成了

@Autowired(required = true) 
public void configeJackson(ObjectMapper objectMapper) { 
    objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE) 
      .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); 
} 

但是,這一切是益智我。我寫了一個關於所有這些魔術的任何解釋的問題,以便有一些不確定和解決問題的方法不是 反覆試驗方法:Are there any Spring Boot documentation for understanding how web mvc configuration is work?