Spring Boot返回JSONObject出现empty问题

一般的Spring项目,RestController通过@ResponseBody,return一个实体类,序列化成JSON返回前端。

@GetMapping("/test")

@ResponseBody

public User test() {

User u=new User();

u.setId(1);

u.setName("LEO");

return u;

}

前端接收到的数据:

{id:1,"name":"LEO"}

具体的原因就不说了,现在我手头上一个项目就要求返回的是JSONObject或JSONArray。

当初想的是:

@GetMapping("/test")

@ResponseBody

public JSONObject test() {

JSONObject data = new JSONObject();

data.put("id", 1000);

data.put("name", "LEO");

return data;

}

但是前端接收到的数据却是:

{"empty":false}

原因也简单,Spring使用Jackson作为序列化、反序列化工具,能将Java的Pojo等序列化/反序列化为JSON,但是面对元素的JSONObject、JSONArray对象,就没办法了。

解决方案1,就是返回String,程序里还是将结果构建为JSONObject、JSONArray,最后return的时候调用toString()即可。

解决方案2,将JSONObject、JSONArray转为Map、List,这是我采用的方案:

@GetMapping("/test1")

@ResponseBody

public DefaultResult> test3(){

JSONObject data = new JSONObject();

data.put("id", 1000);

data.put("name", "LEO");

DefaultResult> result=DefaultResult.success(data.toMap());

log.info(result.toString());

return result;

}

@GetMapping("/test2")

@ResponseBody

public DefaultResult> test4(){

JSONObject data = new JSONObject();

data.put("id", 1000);

data.put("name", "LEO");

JSONArray arrs=new JSONArray();

arrs.put(data);

DefaultResult> result=DefaultResult.success(arrs.toList());

log.info(result.toString());

return result;

}

DefaultResult的代码就不附上了。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章