Springboot格式化给前端返回的时间格式

新增注解

@Documented
@Target({FIELD,METHOD})
@Retention(RUNTIME)
public @interface DateFormatTransform {
    String pattern() default "";
}

新增注解执行逻辑

@Slf4j
@AllArgsConstructor
public class DateFormatTransformValidator extends JsonSerializer<Object> {

    private String pattern;

    @Override
    public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        try {
        	// 获取header传入的时区
            String timeZoneStr = CurrentUserUtil.currentTimeZone();
            if(StringUtils.isBlank(timeZoneStr)){
            	// 无需转换时区并返回原内容给前段
                jsonGenerator.writeObject(value);
            }else{
                Object outPut = value;
                if (value != null) {
                    Date date = new Date();
                    if (value instanceof Date) {
                        date = (Date) value;
                    } else if (value instanceof String) {
                        date = DateUtils.parseDate(value);
                    } else if (value instanceof Long) {
                        date = new Date((Long) value);
                    } else if (value instanceof LocalDateTime) {
                        date = Date.from( ((LocalDateTime) value).atZone( ZoneId.systemDefault()).toInstant());
                    } else if (value instanceof LocalDate) {
                        date = Date.from(((LocalDate) value).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
                    }
                    TimeZone timeZone = TimeZone.getTimeZone(timeZoneStr);
                    SimpleDateFormat currentTime = new SimpleDateFormat(pattern);
                    currentTime.setTimeZone(timeZone);
                    outPut = DateUtils.parseDate(currentTime.format(date),pattern);
                }
                // 转换时区并返回给前端
                jsonGenerator.writeObject(outPut);
            }
        }catch (Exception e){
            log.error("data transform error:", e);
        }
    }
}

建立注解及注解执行逻辑的关联

public class DateFormatTransformAnnotationIntrospector extends JacksonAnnotationIntrospector {

    @Override
    public Object findSerializer(Annotated annotated) {
        DateFormatTransform formatTransform = annotated.getAnnotation(DateFormatTransform.class);
        if(formatTransform != null){
            return new DateFormatTransformValidator(formatTransform.pattern());
        }
        return super.findSerializer(annotated);
    }
}

将时间转换注解注入Spring容器

@Configuration
public class WebServerConfig {

    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        ObjectMapper objectMapper = converter.getObjectMapper();
        objectMapper.setAnnotationIntrospector(new DateFormatTransformAnnotationIntrospector());
        return converter;
    }
}

在返回对象的属性中加入注解

@Data
public class TestVo {
    @DateFormatTransform(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
}

结束

注意:不一定只能给时间转换时区,可以按需使用这个返参的格式化代码,可能是想在服务的所有返回的字段中加入统一的内容,也可以使用这个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值