Spring RESTful Webservice - 返回没有模型对象的JSON

时间:2016-05-23 00:07:39

标签: java json spring web-services rest

那里。
我对在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的教程都教导了使用模型对象的进程,我不想使用它。有没有办法不使用模型对象?

提前谢谢,偷看!

6 个答案:

答案 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;

结果: