那里。
我对在Spring RESTful WebService上返回JSONObjects有疑问。
这就是:
我在我的控制器中有一个方法,我想让它返回一个JSONObject。但是,当我将它的返回类型设置为JSONObject并有效地返回JSONObject时,我得到以下错误:
HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class org.json.JSONObject
所以,我实际上明白这意味着什么,而且我已经至少在3天内搜索了这个问题的答案。
这是我的代码:
@RequestMapping(value = "/value", method = RequestMethod.POST)
public String method(HttpServletRequest request) {
JSONObject json = new JSONObject();
json.put("example", "example message");
return json.toString();
}
当我不得不在前端使用它时,我真的不知道它是否会起作用(这将是一个外部应用程序)。我是否必须返回 true JSONObject?或者返回JSONObject.toString()应该可以正常工作吗?
最后一件事:
大多数关于返回JSONObject的教程都教导了使用模型对象的进程,我不想使用它。有没有办法不使用模型对象?
提前谢谢,偷看!
答案 0 :(得分:1)
我有同样的问题,解决方案简直令人难以置信。我假设您的依赖关系中有Jackson,然后您可以执行以下操作:
创建要返回的JSONObject
后,只需写下:return jsonObject.toMap()
,杰克逊将完成其余的工作。不要忘记将方法的返回类型更改为Map<String, Object>
,并在方法上应用适当的注释:@ResponseBody
,或在整个类中应用@RestController
。这取决于你的需求。
在你的情况下,它将是:
@RequestMapping(value = "/value", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> method(HttpServletRequest request) {
JSONObject json = new JSONObject();
json.put("example", "example message");
return json.toMap();
}
答案 1 :(得分:0)
使用@ResponseBody注释您的方法。
答案 2 :(得分:0)
将类注释更改为@RestController
,然后返回模型对象或Map<String, Object>
。您无需为此任务弄乱JSONObject
。
@ResponseBody
,如 akhill 已回答,也可以,但如果所有控制器都是REST,则过于冗长。
答案 3 :(得分:0)
如果您使用Jackson进行映射,则可以返回ObjectNode。这是杰克逊对json对象的表现。还有一个ArrayNode类。如果你想使用自己的实现,那么编写一个允许读写json的HttpMessageConverter,或者如果它实际返回一个json字符串,则使用toString方法。
答案 4 :(得分:0)
您还可以使用匿名对象:
new Object() {
public final int code = 0;
public final List<T> data = ...;
}
答案 5 :(得分:0)
这很容易解决:
@RequestMapping({"/jsontest"})
public @ResponseBody
Map<String, Object> jsonTest() {
String json = "{\"name\":\"farshad\", \"age\":34 , \"list\": [ 1 , 2 , 3 ] , \"objects\": [ {\"name\":\"a\", \"age\":\"10\"} , {\"name\":\"b\", \"age\":\"20\"} , {\"name\":\"c\", \"age\":\"30\"} ] }";
ObjectMapper mapper = new ObjectMapper();
// convert JSON string to Map
Map<String, Object> map = mapper.readValue(json, Map.class);
return map;
}
依赖性:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
进口:
/* Json Imports */
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
结果: