2017-08-29 7 views
3

GETリクエストが送信されたときにJSONObjectを返そうとしました。Spring ResponseEntity <JSONObject> HttpMediaTypeNotAcceptableException

方法

@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); 
    } 

私は、ファイルからJSONを取得します。そこには単一のjsonオブジェクトがあります。 1行で私はこのようなJSONObjectを解析します。

fs = FileSystem.get(uri, conf); 
    BufferedReader reader = null; 
    reader = new BufferedReader(new InputStreamReader(fs.open(path))); 
    line = reader.readLine(); 
    while (line != null) { 
    jsonObjectList = new JSONObject(line); 
    line = reader.readLine(); 
    } 
    return jsonObjectList; 

これは私のファイルのようです。

{"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]}]} 

私は私の方法をチェックするために郵便番号を使用します。私はこれは私が使用するライブラリです手でjsonobjectを作成し、それをパスしようとしましたが、

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

同じエラーを得た。これは私が

{ 
    "timestamp": 1504020107350, 
    "status": 406, 
    "error": "Not Acceptable", 
    "exception": "org.springframework.web.HttpMediaTypeNotAcceptableException", 
    "message": "Not Acceptable", 
    "path": "/audpro/report/1/1/1" 
} 

を取得エラーです。

import org.codehaus.jettison.json.JSONObject; 

jsonobjectを返すことができないのはなぜですか?

+0

こんにちは@Evgenii私はこれが[この1つ](https://stackoverflow.com/questions/7197268/spring-mvc-httpmediatypenotacceptableexception)のような同様の問題だと思います。 – juanlumn

答えて

0

は、私が実際にはJSONを取得するために JSONObjectを必要としませんが判明します。私はStringを返すことができ、それはjsonとして解析されます。コントローラ

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

INとサービスで、私は、私はまだかかわらず、行くれるJSONObjectを返していない理由についてはよく分からない

String json = line; 
return json; 

を行います。

0

RestControllerクラスに直接JSONObjectを返す代わりに、1つのPOJOクラスにオブジェクトを設定してRestControllerクラスに戻すことができます。 MediaType.APPLICATION_JSON_VALUEのアノテーションレベルではコンバージョンが処理されます。今後、xmljsonの両方を送信する場合は、をアノテーションレベルで拡張してMulti MediaTypesをサポートできるようにするだけです。ちょうどthisの例に従ってください。

また、あなたがHttpMessageConversionsの依存下に含めていることを確認します

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.10</version> 
</dependency> 
関連する問題