SpringBoot统一处理Json数据的日期格式

SpringBoot统一处理Json数据的日期格式

1.伪代码示例

User.java

@Getter
@Setter
@AllArgsConstructor
public class User {

	private Long id;
	private String name;
  	private Date birthday;
}

UserController.java

@RestController
public class UserController {

  @GetMapping("/user")
  public User getUser(){
    return new User(18L, "张三", new Date());
  }
}

2.返回结果

  • 2.1 当我们采用默认的方式,不做任何处理,访问该服务,返回的格式为:
    {"id":18,"name":"张三","birthday":"2019-09-25T08:22:31.287+0000"}
    
  • 2.2 通常我们采用的做法是,在日期类型字段上贴 @JsonFormat方式来设置格式
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    
    {"id":18,"name":"张三","birthday":"2019-09-25"}
    
  • 2.3 这样带来的问题是:如果有多个bean中,存在多个日期字段,这样处理起来就很麻烦,很难做到统一,而且一旦改变格式,需要逐个修改.

2.使用springboot提供的方式来统一处理

  • 因为SpringBoot对Jackson和Gson做了自动化配置,大家可以通过以下路径进去查看.springboot中默认是采用了jackson,如果用户想使用gson,直接添加依赖即可.

    org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration
    org.springframework.boot.autoconfigure.http.GsonHttpMessageConvertersConfiguration
    
  • 进入JacksonHttpMessageConvertersConfiguration 配置类

    @Bean
    	@ConditionalOnMissingBean(value = MappingJackson2HttpMessageConverter.class,
    			ignoredType = { "org.springframework.hateoas.mvc.TypeConstrainedMappingJackson2HttpMessageConverter",
    					"org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter" })
    	public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
    		return new MappingJackson2HttpMessageConverter(objectMapper);
    	}
    
  • 通过 @ConditionOnMissingBean可知,我们可自定义一个配置,来覆盖该消息转换器

  • 方式一 :重新定义MappingJackson2HttpMessageConverter

    @Configuration
    public class WebMvcConfig {
     	@Bean
    	MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
    	MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    	ObjectMapper mapper = new ObjectMapper();
    	mapper.setDateFormat(new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"));
    	converter.setObjectMapper(mapper);
    	return converter;
    }
    
  • 方式二: 重新定义ObjectMapper

    public class WebMvcConfig {
    	@Bean
    	ObjectMapper jacksonObjectMapper(){
     		ObjectMapper mapper = new ObjectMapper();
    		mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
    		return mapper;
     }
    }
    

    因为通过方式一得知,真正的修改格式是通过ObjectMapper类实现的.我们可以进入自动配置类
    org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration查看

  • 关键代码

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

最后,那么方式一和方式二同时使用的话,可以吗?答案是可以的,有个优先级:
同时配置的话MappingJackson2HttpMessageConverter优先级高于ObjectMapper

SpringBoot通过使用统一数据返回格式可以提高开发效率和代码的可维护性。返回统一JSON数据格式可以统一前后端之间的数据交互方式,减少沟通成本,并且提高了代码的可读性和可维护性。 在SpringBoot中,可以定义一个全局异常处理器(GlobalExceptionHandler),用于捕获和处理全局的异常。在异常处理器中,可以定义一个统一数据返回格式,包括状态码、提示信息和返回数据。当发生异常时,异常处理器会将异常信息封装成统一JSON数据格式返回给前端,以便前端进行处理。 为了实现统一数据返回格式,可以定义一个响应对象(ResponseObject),包含对应的状态码、提示信息和返回数据。在业务逻辑处理中,统一使用ResponseObject来封装返回的数据,然后再返回给前端。 在控制器层中,可以使用ResponseEntity对象来返回统一JSON数据格式。通过使用ResponseEntity.ok()方法可以返回一个状态码为200的成功响应,然后将ResponseObject对象作为响应的数据。这样,无论是成功还是失败,都能以统一JSON数据格式返回给前端。 在返回数据时,可以添加一些通用的字段,如请求ID、访问时间等,以便用于日志记录和跟踪。 通过采用统一JSON数据返回格式,可以提高代码的可读性、可维护性和规范性,方便前后端的协作和沟通。同时,也可以方便后期的维护和扩展,减少了代码的冗余和重复编写。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值