在我的 Spring Boot Web 應用程式中,當我從請求映射的函式中回傳它們時,我想將許多不同的類序列化為 JSON。這些類只包含沒有 getter 的私有欄位。為了讓 Jackson 序列化這些私有欄位,我可以使用以下注釋對所有這些類進行注釋,這完全符合預期。
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
但是因為想以這種方式序列化許多不同的類,我想在我的 spring 啟動應用程式中全域宣告。我嘗試了以下方法來實作這一目標:
將 used 中的欄位可見性設定application.properties為 any。
spring.jackson.visibility.field=ANY
自定義在主類中的ObjectMapper使用@Bean。
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}
自定義在主類中的Jackson2ObjectMapperBuilder使用@Bean。
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return new Jackson2ObjectMapperBuilder().visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}
該配置Jackson2ObjectMapperBuilder使用配置類。
@Configuration
public class ObjectMapperConfig implements Jackson2ObjectMapperBuilderCustomizer {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}
}
但這些方法都不適合我。如果我@JsonAutoDetect在要序列化的每個類上使用注釋,它作業得非常好,但是如果我嘗試使用這些全域實作之一,我總是收到以下錯誤:
WARN 5191 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class my.class.i.would.like.to.Serialize]
我不知道是什么導致了這種行為,或者我是否錯過了其他地方的重要內容,但我發現的所有全域方法都不起作用。盡管如此,我仍然不想注釋所有單個類,或者不必在其中定義數千個 getter。
uj5u.com熱心網友回復:
應該與 Spring Boot 一起使用的所有選項都不起作用的事實導致您必須(意外或故意)禁用 MVC 和/或 Jackson 的自動配置的結論。
當您添加具有@EnableWebMvc大多數 Web 相關自動配置的配置類時,將退避并使用 Spring 和您提供的默認值。這也將使這些功能不起作用。
洗掉該注釋并在 中指定屬性application.properties應該足以使其作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/321974.html
