实体类封装命名不规范的请求或响应参数
参考资料地址1:
@JsonProperty和@JSONField注解的区别及用法
参考资料地址2:
https://blog.csdn.net/qq_41143240/article/details/115671561
01 @JsonProperty和@JSONField注解区别
目的
都是为了解决bean与json字段不一致问题,或者字段定义不符合前端所需要的标准
区别
1.框架不同:
@jsonProperty是 Jackson的包,而@jsonfield是fastjson的包
用法不同:
@JSONField这个注解可以用于get、set以及属性上面
02 实体类封装命名不规范的请求或响应参数
@JSONField这个注解分别可以注解在实体类的属性、setter和getter方法上
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.ToString;
import java.util.HashMap;
import java.util.Map;
/**
* 用驼峰的实体类封装命名不规范的请求或响应参数
*
* @author lyn
* @date 2023/4/10 20:32
*/
public class JSONFieldTest {
public static void main(String[] args) {
//模拟第三方响应参数
Map<String, Object> map = new HashMap<>(2);
map.put("Name", "王五");
//模拟接受第三方影响参数
String json = JSON.toJSONString(map);
SmellObjTwo obj = JSON.parseObject(json, SmellObjTwo.class);
//查看参数封装结果
System.out.println(obj);
//SmellObjTwo(name=王五)
//模拟封装请求第三方的请求参数
json = JSON.toJSONString(obj);
//查看参数封装结果
System.out.println(json);
//{"Name":"王五"}
}
@ToString
public class SmellObjTwo{
/**
* 注解在属性上的时候可以设置一些序列化、格式化的属性
* @JSONField(serialize = false)---->序列化的时候忽略这个属性
* @JSONField(format = "yyyyMMdd")---->序列化和反序列化额时候使用yyyyMMdd,一般在Date类型的字段上使用
*/
@JSONField(serialize = false)
public String name;
/**
* 注解在set方法表示json转成bean的时候会将json中的Name属性赋值给实体类的Name
* @param name
*/
@JSONField(name="Name")
public void setName(String name){
this.name = name;
}
/**
* 注解在get方法表示bean转换成json的时候会把实体类的Name属性值赋给json的Name
* @return
*/
@JSONField(name="Name")
public String getName(){
return this.name;
}
}
}
03 实体类接受命名不规范的响应参数
@JSONProperty
类似@JSONField注解注在setter方法上
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.HashMap;
/**
* 用驼峰的实体类接受命名不规范的响应参数
*
* @author lyn
* @date 2023/4/10 19:03
*/
public class JsonPropertyTest {
@Data
public class SmellObj {
@JsonProperty("order_status")
private String orderStatus;
@JsonProperty("order_id")
private Long orderId;
}
public static void main(String[] args) {
//模拟第三方的响应参数
HashMap<String, Object> map = new HashMap<>(2);
map.put("order_status","支付中");
map.put("order_id",1000L);
String json = JSON.toJSONString(map);
//模拟接受参数
SmellObj obj = JSON.parseObject(json, SmellObj.class);
//查看结果
System.out.println(obj);
//SmellObj(orderStatus=支付中, orderId=1000)
json = JSON.toJSONString(obj);
System.out.println(json);
//{"orderId":1000,"orderStatus":"支付中"}
}
}