Springboot中如何使⽤Jackson
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 = {"verters.preferred-json-mapper"},
havingValue = "jackson",
matchIfMissing = true
)
static class MappingJackson2HttpMessageConverterConfiguration {
MappingJackson2HttpMessageConverterConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
value = {MappingJackson2HttpMessageConverter.class},
ignoredType = {"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter", "org.st.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) {
ateXmlMapper(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对象
UserInfo userInfo2 = adValue(userJsonString, UserInfo.class);
System.out.println(userInfo2);
springframework作用}
以上就是Springboot中如何使⽤Jackson的详细内容,更多关于Springboot中使⽤Jackson的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论