我正在尝试创建一个方法,将对象传递到该方法并读取所有字段,以便为null和String的字段指定值"。
现在问题出在我的课上了。我有这个型号:
@Getter
@Setter
@NoArgsConstructor
@ToString
public class AccountModel {
private String noTotCount;
private int nTotal;
private String account;
}
我采用了这种方法:private ObjectMapper obMapper=新ObjectMapper((;
private Object stringNullToEmpty(Object object) {
Class<?> clase = object.getClass();
Map<String, Object> objectMap = obMapper.convertValue(object, new TypeReference<Map<String, Object>>(){});
for (Field field : clase.getDeclaredFields()) {
String fieldName = field.getName();
if(field.getType().equals(String.class) && objectMap.get(fieldName) == null) {
objectMap.put(field.getName(), "a");
}
}
return obMapper.convertValue(objectMap, clase);
}
当我生成obMapper.convertValue()
时,会出现错误,因为他正在将我的noTotCount
字段转换为nototCount
,所以当您进入条件并尝试put()
时,objectMap中没有包含关键字noTotCount
的字段,因为包含objectMap的关键字是nototCount
。
为什么ObjectMapper将我的noTotCount
字段转换为nototCount
?
您在javabean命名约定中遇到了一个问题,即当您具有以单个字母作为第一个"单词"的camelcase属性时,lombok和jackson生成的getter名称。有关详细信息,请参阅此问题。
总之,jackson期望属性(getter和setter(,因为它们将由IDE(例如eclipse(生成:getnTotCount
,但是我猜lombok生成getNTotCount
(我还没有对您的代码进行反lomboked(。这使得jackson失败(通过重命名getter来复制(。
解决方法:自己创建getter并防止lombok生成@JsonProperty("nTotCount") public String getNTotCount()
或public String getnTotCount()