Springboot中如何使用Jackson
作者:DayRain 发布时间:2021-07-29 03:27:34
1、SpringMVC中默认集成
SpringMVC已经默认集成了JackSon,如下所示:
@RequestMapping("/addUserInfo")
public UserInfo addUserInfo(@RequestBody UserInfo userInfo){
}
可以用UserInfo对象来接前台传过来的json,SpringMVC已经帮我们自动反序列化。
可以看到,在SpringBoot中,只需要导入web starter,不需要添加其他的依赖,就可以使用Jackson。
2、时间格式化
在序列化的过程中,如果有Date格式,我们可以通过下面几种方式来对时间字段进行格式化。
2.1、注解方式
通过添加JsonFormat注解,可以固定日期格式。
public class UserInfo {
private String name;
private String password;
private Integer age;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birth;
也可以通过这个注解指定时区(time zone)
2.2、重写bean
也可以重新 JacksonHttpMessageConvertersConfiguration 类中的bean
@Configuration
public class WebMvcConfig {
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
return mappingJackson2HttpMessageConverter;
}
}
在JacksonHttpMessageConvertersConfiguration这个类中,原来的方法是:
@ConditionalOnClass({ObjectMapper.class})
@ConditionalOnBean({ObjectMapper.class})
@ConditionalOnProperty(
name = {"spring.mvc.converters.preferred-json-mapper"},
havingValue = "jackson",
matchIfMissing = true
)
static class MappingJackson2HttpMessageConverterConfiguration {
MappingJackson2HttpMessageConverterConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
value = {MappingJackson2HttpMessageConverter.class},
ignoredType = {"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter", "org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter"}
)
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
return new MappingJackson2HttpMessageConverter(objectMapper);
}
}
这是最新的版本的spring,与之前版本的略有差异,不过可以看到,给 mappingJackson2HttpMessageConverter方法注入了一个ObjectMapper,那么我们可不可以直接修改ObjectMapper呢?当然可以,在Jackson的自动配置类(JacksonAutoConfiguration)中,可以发现:
@ConditionalOnClass({Jackson2ObjectMapperBuilder.class})
static class JacksonObjectMapperConfiguration {
JacksonObjectMapperConfiguration() {
}
@Bean
@Primary
@ConditionalOnMissingBean
ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
return builder.createXmlMapper(false).build();
}
}
在这个内部类里,提供了ObjectMapper。所以我们可以直接重新这个Bean,也可以达到全局修改日期格式的作用。
@Configuration
public class WebMvcConfig {
@Bean
ObjectMapper jacksonObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
return objectMapper;
}
}
经过测试,注解方式的优先级要高于下面的两种。
3、Jackson的简单使用
//测试jackSon
public static void main(String[] args) throws JsonProcessingException {
UserInfo userInfo = getTestUser();
ObjectMapper objectMapper = new ObjectMapper();
//将对象序列化为json字符串
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //忽略为null的字段
String userJsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(userInfo);
System.out.println(userJsonString);
//将json反序列化为java对象
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
UserInfo userInfo2 = objectMapper.readValue(userJsonString, UserInfo.class);
System.out.println(userInfo2);
}
本文作者:DayRain
本文链接:https://www.cnblogs.com/phdeblog/p/13234842.html
来源:https://www.cnblogs.com/phdeblog/p/13234842.html
猜你喜欢
- 1. 编写索引内容节点解释:settings:配置信息"number_of_replicas": 0 不需要备份(单节点
- 简介常见的4种使用线程的方法:1实现 Runnable 接口;2实现 Callable 接口;3继承 Thread 类。4匿名内部类的写法。
- 问题描述ResultSet 表示 select 语句的查询结果集。ResultSet 对象具有指向其当前数据行的指针, 最初,指针被置于第一
- 前言本文学习MP中的更新操作方法,带大家一起查看源码,了解更新操作的方法。学会熟练地去运用更新方法解决自己在项目中的问题。一、通过id更新1
- 主要是因为GZipStream的构造函数中第一个需要传入一个Stream,第二个是指定操作方式:压缩还是解压缩。当时的疑问点主要有:1.我传
- 使用idea进行JavaWeb开发时,在前端与后台交互常常出现乱码问题,包括日志/控制台输出乱码,参数乱码等问题,归根结底是编码格式不对,解
- 对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序。代码如下:进行降序排列 进行降序排列 Co
- 一、参数管理在编程系统中,为了能写出良好的代码,会根据是各种设计模式、原则、约束等去规范代码,从而提高代码的可读性、复用性、可修改,实际上个
- java调用外部程序的方法 在一个java应用中,可能会遇到这样的需求,就是需要调用一些外部的应用做一些处理,比如调用excel,
- 本文实例为大家分享了Java实现窗体程序显示日历的具体代码,供大家参考,具体内容如下实训要求:1.使用BorderLayout 进行总体布局
- 本文将介绍如何通过Java程序来查找并高亮PDF中的文本。使用工具:Free Spire.PDF for Java(免费版)Jar文件获取及
- 本文实例为大家分享了java实现面板之间切换的具体代码,供大家参考,具体内容如下如图:关键技术:事件监听,设置显示面板,重新刷新验证。set
- 本文实例为大家分享了java使用字符画一个海绵宝宝的具体代码,供大家参考,具体内容如下用字符画一个海绵宝宝用" &ldqu
- 1、回顾一下JDK * 的核心参数如果我们要为target类创建一个【JDK * 对象】,那么我们必须要传入如下三个核心参数加载targ
- 博主最近在做一个内网项目,内部可以访问外部数据,但是外部访问不了内部数据,这也就造成了可能文件无法上传,所以博主另辟蹊径,在本地服务器上建立
- 主要功能共有三个角色:管理员、教师、学生。管理员功能有:学生管理、教师管理、评教管理、指标管理、课程管理等。教师功能有:学生管理、指标管理、
- java集合的工具类Collections中提供了两种排序的方法,分别是:Collections.sort(List list)Collec
- 上一篇介绍了使用springmvc集成shiro登陆过程,通过FormAuthenticationFilter过滤器获取到用户输入的账号密码
- 1.情景展示将要访问的接口地址等常用的配置添加到properties文件中,比直接写到java类中的好处在于:当我们需要修改相应配置时,直接
- 实体类时间格式化java 实体类 时间格式化注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:s