使用 @JsonProperty处理大写开头的内容出现多出一个字段
目录
处理方式3:使用@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
现象:
获取的数据是大写开头的,使用 @JsonProperty 出现多出一个字段
引用:
// Fastjson:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
// Swagger:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
类:
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel("IMSI-IME绑定信息查询的详情")
public class CardStatusdDetail {
@ApiModelProperty("IMEI")
@JsonProperty("IMEI")
private String IMEI;
@ApiModelProperty("设备IMSI")
@JsonProperty("IMSI")
private String IMSI;
@ApiModelProperty("bingdingType 绑定的类型")
@JsonProperty("BingdingType")
private String BingdingType;
@ApiModelProperty("bingdingStatus 绑定的状态")
@JsonProperty("BingdingStatus")
private String BingdingStatus;
@ApiModelProperty("deviceType 设备类型")
@JsonProperty("DeviceType")
private String DeviceType;
}
测试:
@PostMapping("/queryBingDingStatusDetailTest")
@ApiOperation("queryBingDingStatusDetailTest")
public CardStatusdDetail queryBingDingStatusDetailTest(){
String json = "{\"IMSI\":\"46011338941\",\"IMEI\":\"863119031909662\",\"BingdingType\":\"开通\",\"BingdingStatus\":\"是,匹配成功\",\"DeviceType\":\" Smartphone终端信号(Che1-CL1023) \"}";
try {
ObjectMapper mapper = new ObjectMapper();
CardStatusdDetail cardStatusdDetail = mapper.readValue(json, new TypeReference<CardStatusdDetail>() {
});
System.out.println(cardStatusdDetail.toString());
return cardStatusdDetail;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
原因:
jackson2对pojo类型序列化的处理。在get处理的时候,会生成一个小写的。
解决方法:
处理方式1:首字母改成小写的
因为值对应的@JsonProperty("BingdingType") 里面的内容,在属性设置的时候,把首字母改成小写的
比如:private String bingdingType;
代码:
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel("绑定信息查询的详情")
public class CardStatusdDetail {
@ApiModelProperty("IMEI")
@JsonProperty("IMEI")
private String imei;
@ApiModelProperty("设备IMSI")
@JsonProperty("IMSI")
private String imsi;
@ApiModelProperty("bingdingType 绑定的类型")
@JsonProperty("BingdingType")
private String bingdingType;
@ApiModelProperty("bingdingStatus 绑定的状态")
@JsonProperty("BingdingStatus")
private String bingdingStatus;
@ApiModelProperty("deviceType 设备类型")
@JsonProperty("DeviceType")
private String deviceType;
}
返回值的响应:
处理方式2:使用get
手动编写get方法,注解加到方法上。
代码:
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel("IMSI-IME绑定信息查询的详情")
public class CardStatusdDetail {
@ApiModelProperty("IMEI")
private String IMEI;
@ApiModelProperty("设备IMSI")
private String IMSI;
@ApiModelProperty("bingdingType 绑定的类型")
private String BingdingType;
@ApiModelProperty("bingdingStatus 绑定的状态")
private String BingdingStatus;
@ApiModelProperty("deviceType 设备类型")
private String DeviceType;
@JsonProperty("IMEI")
public String getIMEI() {
return IMEI;
}
@JsonProperty("IMSI")
public String getIMSI() {
return IMSI;
}
@JsonProperty("BingdingType")
public String getBingdingType() {
return BingdingType;
}
@JsonProperty("BingdingStatus")
public String getBingdingStatus() {
return BingdingStatus;
}
@JsonProperty("DeviceType")
public String getDeviceType() {
return DeviceType;
}
}
返回值的响应:
处理方式3:使用@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
代码:
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel("IMSI-IME绑定信息查询的详情")
@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
public class CardStatusdDetail {
@ApiModelProperty("IMEI")
@JsonProperty("IMEI")
private String IMEI;
@ApiModelProperty("设备IMSI")
@JsonProperty("IMSI")
private String IMSI;
@ApiModelProperty("bingdingType 绑定的类型")
@JsonProperty("BingdingType")
private String BingdingType;
@ApiModelProperty("bingdingStatus 绑定的状态")
@JsonProperty("BingdingStatus")
private String BingdingStatus;
@ApiModelProperty("deviceType 设备类型")
@JsonProperty("DeviceType")
private String DeviceType;
}
返回值的响应:
方法总结: 以上方法使用第一种方式比较直接,直接应该get导致返回一个小写开头的。第三种方式会直接相对应,第二种会繁琐些
总结:
使用@JsonProperty("属性名") 主要是根据属性名相对应的,取回来的值大写的时候需要注意下,小写就不会冲突了。