由于经常需要接收前端的json数据,而json数据一般都是使用下划线命名的。后端又不太建议使用map接收,所以就需要用到使用自定义类来接收(如果参数过少,可以考虑使用内部类,将所有参数类写到一个大类中)
使用@JsonProperty或@JsonAlias
@JsonProperty 直接定义成别名
@JsonAlias添加别名的意思
例如:
@Data
public class MyRequestParam {
@Data
public static class TestParam {
// @JsonAlias("host_ip")
@JsonProperty("host_ip")
private boolean hostIp;
}
}
使用@RequestBody MyRequestParam.TestParam flag来接收json参数时候,只能接收到host_ip的值(使用true测试,因为boolean值没有=false),使用testFlag作为json字段的键是接收不到的。
而注解@JsonAlias(“host_ip”)是hostIp和host_ip做键都可以接收到。
返回json数据时候,也即使用对象或者result类中的object类型返回对象数据时候:
@JsonProperty也会起作用
@JsonAlias只会在接收时候起到起小名的作用。
注:使用@JsonProperty时候,如果使用fastjson工具类进行处理,比如:
JSON.toJSONString(obj);
JSONObject.toJSONString(obj);
出来的结果依旧是testFlag。
当然fastjson对于这种情况也给出了一个注解,那就是@JSONField(name = “host_ip”),在属性上面添加注解,在使用json工具时候也可以对应转成想要的字段名了。
总结:
@JsonProperty 在接收前端和返回给前端字段时候起作用且只能使用定义的别名
@JsonAlias 只在接收前端数据数据时候起作用且本身名字和定义的别名都可以使用。
@JSONField(name = “name”) 当需要使用json工具类进行转json字符串时候起作用。