spring中JSON的自定义序列化
方案1:使用@JsonComponent注解自定义JSON的序列化方式。这种方式,会通过JsonSerializer<String>中<>中的类型,取代spring中String类型默认的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的序列化方式,这种方式只是修改这一个地方的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;
}
测试结果
接口:
@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;
}
结果:


浙公网安备 33010602011771号