spring-boot 属性全局序列化

404 阅读1分钟

1.全局序列化,如日期的格式,后端传多余参数是否报错等

serializerByType 序列化,

后台返回前端(从日期序列化为字符串)

deserializerByType 反序列化,

前端传参到后端(字符串从列化为日期),post 传参使用,如下;get 传参序列化看后面 【2 get 传参反序列化】

/**
 * 批量保存
 *
 * @author mayanze
 */
@PostMapping("/batchSave")
public ResponseConsequence batchSave(@Valid @RequestBody DfBatchSaveParam param){
    service.batchSave(param.getPhyUnitId(),param.getDataList());
    return ResponseData.success();
}
package com.g_link.TwoRules.common.config;

import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.context.annotation.Bean;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 请求返回值格式化
 * 后台-》前台
 * @author mayanze
 * @since 2023-10-19 11:23
 */
@JsonComponent
public class ResultFormatter {
    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT)));
            builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT)));
        };
    }
}

2. get 传参反序列化

package com.g_link.TwoRules.common.config;

import cn.hutool.core.date.LocalDateTimeUtil;
import org.springframework.format.Formatter;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Locale;

/**
 * 请求参数格式化
 * 前台-》后台,日期格式化
 * @author mayanze
 * @since 2023-10-19 14:47
 */
@Component
public class ParameterFormatter implements Formatter<LocalDateTime> {

    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    @Override
    public LocalDateTime parse(String text, Locale locale) {
        return LocalDateTimeUtil.parse(text, DATE_TIME_FORMAT);
    }

    @Override
    public String print(LocalDateTime object, Locale locale) {
        return LocalDateTimeUtil.format(object, DATE_TIME_FORMAT);
    }
}