1. jsonToBean时,json中有的字段,bean中没有 无法匹配时,忽略此字段,不抛出异常(默认是抛出异常的) 方案一(局部):在class上加 @JsonIgnoreProperties(ignoreUnknown = true) public class tes 方案二(局部或全局)或者代码控制 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.readValue(json,cls);
================================================= 2020-06-11 =====================补充
今日又遇到这个错误,没想到3年前 我就研究过 呵呵 厉害了 我自己!!!!
首先看demo:
public class TestMain { public static void main(String[] args) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); /* 1.把一个实体类转换成一个Json 是完全没有问题的,通常不会报错 */ UserBase userBase = new UserBase(); userBase.setUserName("小李飞刀"); userBase.setAge(18); userBase.setAddTime(new Date()); String json = objectMapper.writeValueAsString(userBase); System.out.println(json);//{"userName":"小李飞刀","age":18,"addTime":1591851786568} /* 2.若是把一个json转换成实体类,那么这步可能会报错,首先我们测试 json里字段不全缺失的情况 缺少addTime字段,你可能已经猜到缺少字段不会引起什么问题。因为 objectMapper.read是 读json的,一个字段一个字段的读,你缺少自然没有问题 */ String json1 = "{"userName":"小李飞刀","age":18}"; UserBase userBase1 = objectMapper.readValue(json1, UserBase.class); System.out.println(objectMapper.writeValueAsString(userBase1));//{"userName":"小李飞刀","age":18,"addTime":null} /* 3.缺少没有问题,但是若是 json 中有某一个字段,而实体类中没有这个字段,就意味着找不到,他的逻辑是json中读一个字段,然后去 实体类中寻找这个字段,若找不到就会抛出异常。以下是举例 */ String json2 = "{"userName":"小李飞刀","age88":18}";//把age换成age88 UserBase userBase2 = objectMapper.readValue(json2, UserBase.class); System.out.println(objectMapper.writeValueAsString(userBase2));//这一步就会抛出异常了。 //2种解决方法 都可以。 } }
其实这2种方法 都一般,可以看情况使用,尽量不用,没有必要。主要是要看使用场景。我们用的最多的就是在SpringBoot项目中, HTTP请求 content-type:application/json,时的请求体的Bean类,
因为有些接口的参数,经常发生变化,如增加参数或减少参数,增加参数还好,尤其是减少参数,那么若不忽略掉这个错误,就不行。举例: