使用jackson自定义序列化
1.导入maven
一共有三个:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.4</version>
</dependency>
2.新建一个实体类Person
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
@Id
private Long id;
private String name;
private int age;
private boolean sex;
}
3.新建一个统一返回的对象类ResponseJson
import com.example.demo.config.ResponseJsonConfig;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonSerialize(using = ResponseJsonConfig.class)
public class ResponseJson {
private int statusCode;
private Object data;
private String time;
private String message;
public ResponseJson(Object data)
{
this.data = data;
}
}
4.新建一个自定义序列化配置的ResponseJsonConfig类
import com.example.demo.utils.ResponseJson;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ResponseJsonConfig extends StdSerializer<ResponseJson> {
public ResponseJsonConfig()
{
super(ResponseJson.class);
}
@Override
public void serialize(ResponseJson responseJson, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(new Date());
jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("statusCode",responseJson.getStatusCode());
jsonGenerator.writeStringField("message",responseJson.getMessage() == null? "" : responseJson.getMessage());
jsonGenerator.writeObjectField("data",responseJson.getData() == null? "" : responseJson.getData());
jsonGenerator.writeStringField("time",time);
jsonGenerator.writeEndObject();
}
}
5.写一个controller来测试一下
import com.example.demo.test.Person;
import com.example.demo.utils.ResponseJson;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/test")
public class TestController {
@ResponseBody
@RequestMapping(value = "/serializer",produces = "application/json;charset=UTF-8")
public Object testSerializer()
{
return new ResponseJson(new Person(1L,"张三",21,true));
}
}
6.运行测试一下
成功!