当前位置:   article > 正文

spring boot的返回值里面含有net.sf.json.JSONObject 报错net.sf.json.JSONNull[“empty“])]_去掉 net.sf.json.jsonnull

去掉 net.sf.json.jsonnull

一、过程

在对接第三的接口使,发现对方使用的json是net.sf.json.JSONObject。接口在返回值的时候就没有对其进行处理,直接返回了但是,后台也不报错,后端也没有收到响应值,只显示500的报错状态码。仔仔细细的看后台的日志发现:

  1. 2024-03-28 10:57:14.514 WARN 34128 --- [nio-8022-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver :
  2. Resolved [org.springframework.http.converter.HttpMessageNotWritableException:
  3. Could not write JSON: Object is null; nested exception is
  4. com.fasterxml.jackson.databind.JsonMappingException:
  5. Object is null (through reference chain: com.at21.sign2.util.ResultUtils["data"]-
  6. >net.sf.json.JSONObject["dd"]->net.sf.json.JSONArray[1]->net.sf.json.JSONNull["empty"])]

这尼玛,报错就好好报错,你打个warn 是什么鬼,就不会error么!!!屮

二、复现bug

接口的部分代码

  1. @RequestMapping("test")
  2. public Object test() {
  3. JSONArray ja = new JSONArray();
  4. ja.add("aaa");
  5. ja.add(null);
  6. JSONObject js = new JSONObject();
  7. js.put("aa", 141);
  8. js.put("bb", null);
  9. js.put("cc", "");
  10. js.put("dd", ja);
  11. System.out.println(js.toString());
  12. return ResultUtils.success(js);
  13. }

打印的json数据是:  {"aa":141,"cc":"","dd":["aaa",null]}
问题1:bb是null,你™的吃了啊!!

问题2:数组里面有null spring boot响应就直接500了

三、解决

方法1:遍历去除数组中的null

  1. JSONObject json2 = new JSONObject();
  2. JSONObject xxxxxx = (JSONObject) json.get("xxxxxx");
  3. Iterator<Map.Entry<String, Object>> it = xxxxxx.entrySet().iterator();
  4. while (it.hasNext()){
  5. Map.Entry<String, Object> next = it.next();
  6. if(!(next.getValue() instanceof JSONNull)) {
  7. json2.put(next.getKey(),next.getValue());
  8. }
  9. }
  10. json.put("xxxxxx", json2);

方法2:配置spring boot 的json格式的序列化

  1. @Bean
  2. public ObjectMapper objectMapper(){
  3. return new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
  4. }

方法3:不要使用 net.sf.json.JSONObject (垃圾)

建议使用阿里的 com.alibaba.fastjson.JSONObject

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.83</version>
  5. </dependency>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/356988?site
推荐阅读
相关标签
  

闽ICP备14008679号