1.使用注解

public class User {
    private Integer id;
    private String username;
    private String address;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
}

这种方式的优点是在需要处理的日期字段比较少的情况下配置十分便捷,仅需一个注解。

2.通过自定义ObjectMapper

Springboot自带jackson和Gson。无需我们配置json解析。但有的时候他自带的处理方式不能满足我们的需求,所以我们可以在其基础上增加我们自己的功能。
以jackson为例:
Spring通过JacksonHttpMessageConvertersConfiguration这个类来配置jackson的json的转换
查看其中使用注解配置json处理的代码片段:

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);
    }
}

可以发现new的转换器对象有一个输入的参数,这个参数通过调试可以发现来自于JacksonAutoConfiguration这个配置类

@ConditionalOnClass({Jackson2ObjectMapperBuilder.class})
static class JacksonObjectMapperConfiguration {
    JacksonObjectMapperConfiguration() {
    }

    @Bean
    @Primary
    @ConditionalOnMissingBean
    ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        return builder.createXmlMapper(false).build();
    }
}

可以从注解ConditionalOnMissingBean的名字发现当没有ObjectMapper的时候他会执行下面的代码。但是如果你自己定义了的话就不会走这里的代码直接把mapper带给MappingJackson2HttpMessageConverterConfiguration。(具体过程可以自己打断点调试)
所以我们可以自己创建一个ObjectMapper的

// 因为在启动的过程中会加载这个配置所以我们在这里定义我们的ObjectMapper
@Configuration
public class WebMVCConfig {
    @Bean
    ObjectMapper objectMapper(){
        ObjectMapper om = new ObjectMapper();
        om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        return om;
    }
}

通过这样一个配置我们便可以使json中所有的时间都格式化成我们规定的格式。

Last modification:April 2nd, 2020 at 05:11 pm
If you think my article is useful to you, please feel free to appreciate