又是一个风和日丽的挖坑下午,接口编写好后,运行,查看日志,咦,我新加的值没有写进去!!!
问题复现
添加需要的jar包: fastjson2
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.9</version>
</dependency>
准备实体类
@Data
public class Product {
private Long id;
private String productName;
private Integer status;
private BigDecimal price;
private String productDesc;
private String caption;
private String oColor;
}
开始测试,写一个测试方法:
@Test
@GetMapping("test")
public void testJson(){
String str = "{\"productName\": \"产品名称\", \"price\": 12.5, \"oColor\": \"蓝色\", \"productDesc\": \"产品描述\"}";
Product product = JSON.parseObject(str, Product.class);
System.out.println("product=" + product);
}
输出结果:
在上面我们可以看到 oColor
没有注入成功!!!
问题分析
给JSON.parseObject
打个断点进去瞧瞧
objectReader
方法下的setOColor
里的fieldName
是OColor
,正常应该为oColor
发现问题所在了:
当属性命名为:第一个字母小写,第二个字母大写,就会出现这个问题
解决方法
在属性上加上@JsonProperty
@Data
public class Product {
private Long id;
private String productName;
private Integer status;
private BigDecimal price;
private String productDesc;
private String caption;
@JsonProperty("oColor")
private String oColor;
}
再运行试试
属性注入成功,完美!
再打个断点,发现fieldName
正常了