Springboot中如何使用Jackson
程序员文章站
2022-03-24 16:28:13
1、springmvc中默认集成springmvc已经默认集成了jackson,如下所示: @requestmapping("/adduserinfo") public userinfo addu...
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
本文链接:
以上就是springboot中如何使用jackson的详细内容,更多关于springboot中使用jackson的资料请关注其它相关文章!