spring中JSON的自定义序列化

1.使用@JsonComponent注解自定义JSON的序列化方式。

  示例:对象序列化json字符串时,将对象中的指定属性中的值的_变为|

package com.springweb.demo.custrule;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.boot.jackson.JsonComponent;

import java.io.IOException;


/**
 * JSON的自定义序列化
 * 可以定义多种方式处理json的序列化
 */

@JsonComponent
public class MyJsonFormatter {

    /**
     * 特殊字符的转义
     */

    public static class SpecialDeCodeProceed extends JsonSerializer<String> {

        @Override
        public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            String str = ObjectUtils.isEmpty(value) ? null : value.replace("_", "|");
            gen.writeString(str);
        }
    }

}

2.使用@JsonSerialize(using = MyJsonFormatter.SpecialDeCodeProceed.class)指定json的序列化方式

package com.springweb.demo.respose;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.springweb.demo.custrule.MyJsonFormatter;
import lombok.Data;

@Data
public class TestResp {

    @JsonSerialize(using = MyJsonFormatter.SpecialDeCodeProceed.class)
    private String respText;

}

3.测试

  接口:

 @PostMapping("/post")
    @ResponseBody
    @Operation(summary = "输出post", description = "post接口", method = "POST")
    @ApiOperationSupport(order = 1)
    @AccessLimit
    public TestResp postString(@RequestBody TestReq request){
        TestResp resp = new TestResp();
        String s = "hello, post method.[" + request.getReqText() + "]";
        resp.setRespText(s);
        return resp;
    }

  

  结果:

 

posted @ 2024-02-28 13:59  话祥  阅读(126)  评论(0编辑  收藏  举报