弹簧响应性<;JSONObject>;HttpMediaTypeNotAcceptableException

弹簧响应性<;JSONObject>;HttpMediaTypeNotAcceptableException,json,spring,Json,Spring,我尝试在发送GET请求时返回JSONObject 方法 @RequestMapping(value = "/{businessId}/{orderId}/{reportId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<JSONObject> getReport(@PathVariable

我尝试在发送GET请求时返回JSONObject

方法

  @RequestMapping(value = "/{businessId}/{orderId}/{reportId}", method = RequestMethod.GET,
    produces = MediaType.APPLICATION_JSON_VALUE)
  @ResponseBody
  public ResponseEntity<JSONObject> getReport(@PathVariable("businessId") String businessId,
                                               @PathVariable("orderId") String orderId,
                                               @PathVariable("reportId") Long reportId) throws JSONException {
    return new ResponseEntity<JSONObject>(reportService.getReportJSON(), HttpStatus.OK);
  }
这就是我的文件的样子

{"reportId":"1","description":"СегментацияпоПоливозраст","orderId":"357","businessId":"НашКлиент№1","tables":[{"name":"Мужчины","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[2571,5287,4587,7705,3675,3743,7423]},{"name":"Женщины","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[7552,3107,6477,4967,9106,7859,9060]},{"name":"Мужчиныиженщины","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[7552,3107,6477,4967,9106,7859,9060]}]}
我用邮递员检查我的方法。这就是我得到的错误

{
    "timestamp": 1504020107350,
    "status": 406,
    "error": "Not Acceptable",
    "exception": "org.springframework.web.HttpMediaTypeNotAcceptableException",
    "message": "Not Acceptable",
    "path": "/audpro/report/1/1/1"
}
我试图手动创建一个jsonobject并传递它,但得到了相同的错误

JSONObject response = new JSONObject();
response.put("id", 555);
response.put("message", "Provision successful!");
return new ResponseEntity<>(response, HttpStatus.OK);

为什么我不能返回jsonobject?

您可以在一个POJO类中设置对象,然后在RestController类中返回,而不是在RestController类中直接返回。
MediaType。注释级别中的应用程序\u JSON\u值
将负责转换。将来如果您希望同时发送
xml
JSON
,只需在注释级别扩展更多的
MediaTypes
,即可支持
多媒体类型
。只需效仿

另外,请确保包含以下对
HttpMessageConversions
的依赖项:


org.codehaus.jackson
杰克逊地图绘制者
1.9.10

事实证明,我实际上不需要JSONObject来获取json。我可以返回一个字符串,它将被解析为json。在控制器中

  public ResponseEntity<String> getReport(@PathVariables) throws JSONException {
    return new ResponseEntity<>(reportService.getReportJSON(), HttpStatus.OK);
  }

我仍然不确定为什么返回JSONObject是不可行的。

Hi@Evgenii我认为这是一个类似的问题,比如
import org.codehaus.jettison.json.JSONObject;
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.10</version>
</dependency> 
  public ResponseEntity<String> getReport(@PathVariables) throws JSONException {
    return new ResponseEntity<>(reportService.getReportJSON(), HttpStatus.OK);
  }
String json = line;
return json;