春天开机MVC项目用纯Java配置如何杰克逊配置省略如果你使用SpringBoot,理想情况下,你应该已经有Hibernate4Module延迟加载属性配置杰克逊省略延迟加载在Spring属性引导
回答
。 否则添加这种依赖性
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
<version>2.5.3</version>
</dependency>
下创建一个名为“HibernateAwareObjectMapper”或任何你想将它命名类:
有以下内容:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;
public class HibernateAwareObjectMapper extends ObjectMapper {
public HibernateAwareObjectMapper() {
registerModule(new Hibernate4Module());
}
}
不同版本的Hibernate,请参考到这些休眠模块:
// for Hibernate 4.x:
mapper.registerModule(new Hibernate4Module());
// or, for Hibernate 5.x
mapper.registerModule(new Hibernate5Module());
// or, for Hibernate 3.6
mapper.registerModule(new Hibernate3Module());
现在您需要通过消息转换器注册您的HibernateAwareObjectMapper。为此,创建一个扩展扩展WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter的Config类。 (如果你已经有一个只是按照下一步)。
现在使用HibernateObjectMapper注册的MessageConverter:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
List<MediaType> supportedMediaTypes=new ArrayList<>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
supportedMediaTypes.add(MediaType.TEXT_PLAIN);
MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new HibernateAwareObjectMapper());
converter.setPrettyPrint(true);
converter.setSupportedMediaTypes(supportedMediaTypes);
converters.add(converter);
super.configureMessageConverters(converters);
}
中提琴!这应该够了。 这是一个纯java(no-xml)的方式来做这个春季启动web应用程序。
随意评论,如果你想添加到答案。
对我来说,最简单的方法是扩展WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter
并覆盖extendMessageConverters
方法。里面我已经搜索了MappingJackson2HttpMessageConverter
,只是注册了Jackson Hibernate模块。
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class CustomWebMvcAutoConfig extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter
{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.registerModule(new Hibernate4Module());
// replace Hibernate4Module() with the proper class for your hibernate version.
}
}
}
}
这样你就不会失去Spring配置的所有默认转换器。
谢谢@Grzegorz,你把我带出了一个2天的地狱!它对我来说非常合适。我在RestController域中,使用休眠5.由Spring,Hibernate Session和FetchType LAZY或EAGER完成的Json Jackson自动序列化现在以可以理解的方式工作。 N.B .:现在并不需要任何@JsonInclude(JsonInclude.Include.NON_ABSENT/NON_EMPTY/etc ..) –
使用最新版本的Spring Boot,这更容易。
类型com.fasterxml.jackson.databind.Module的任何豆将与自动配置Jackson2ObjectMapperBuilder被自动注册和施加到其创建任何ObjectMapper实例。这为您在向应用程序添加新功能时提供了一种全球机制,可以为自定义模块提供支持
74.3 Customize the Jackson ObjectMapper
首先确保您具有所需的杰克逊依赖性:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
</dependency>
然后,您可以只包含模块作为应用程序上下文@Bean
。
@Bean
public Module hibernate4Module()
{
return new Hibernate4Module();
}
你是一位有福的圣徒。直到我切换到这个配置方法:在这个应用程序不工作:O –
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jsonConverter.getObjectMapper();
objectMapper.registerModule(new Hibernate5Module());
return jsonConverter;
}
添加到您的application.java。它会工作。 – tim
什么@Grzegorz写了非常适合我。只是在这里呈现他的解决方案,而他的自定义类:
编辑:我在RestController域
@Configuration
public class CustomWebMvcAutoConfig extends WebMvcConfigurerAdapter
{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.registerModule(new Hibernate5Module());
// replace Hibernate4Module() with the proper class for your hibernate version.
}
}
}
}
- 1. 杰克逊系列化和延迟加载在Spring MVC
- 2. 杰克逊:忽略父类属性
- 3. 杰克逊图书馆忽略属性
- 4. 反序列化休眠和杰克逊延迟加载
- 5. 杰克逊:JsonTypeInfo不添加属性
- 6. 杰克逊在Spring MVC 3.1.2
- 7. 如何配置杰克逊解串器嵌套的entites与Spring引导
- 8. 延迟加载属性
- 9. 告诉杰克逊只在生成xml时忽略属性
- 10. 无法配置混合杰克逊在
- 11. 的Spring MVC + - 杰克逊JsonView
- 12. 加载属性延迟加载
- 13. 杰克逊自引用导致循环
- 14. 杰克逊JsonView属性默认包含
- 15. 杰克逊的Json accesing JsonNode属性名
- 16. 杰克逊jsonnode属性错误
- 17. 杰克逊 - 无属性名称
- 18. 使用Spring引导和杰克逊日期时区
- 19. 杰克逊忽略子类的属性是3:D方
- 20. 杰克逊序列化省略的@OneToMany关系
- 21. 杰克逊2.0系列化配置
- 22. 杰克逊配置自己的json
- 23. 杰克逊2.0杰克逊1.x的
- 24. 杰克逊延迟反序列化领域
- 25. 杰克逊:忽略Json的配置价值
- 26. Spring Boot:杰克逊不会从“application.properties”中获取配置
- 27. 杰克逊正在忽略XmlAccessorType.NONE
- 28. 配置杰克逊使用杰克逊的数据类型,休眠
- 29. 杰克逊JSON多态性
- 30. 杰克逊多态性
只是1件小的事情....确保你延长org.springframework.web。 servlet.config.annotation.WebMvcConfigurerAdapter,而不是spring引导的。 – tomerz