欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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中如何使用Jackson

 可以看到,在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的资料请关注其它相关文章!

相关标签: Springboot Jackson