2017-04-12 1 views
0

私は(これ以下:http://www.concretepage.com/spring-4/spring-4-mvc-jsonp-example-with-rest-responsebody-responseentity)問題なくカスタムJavaオブジェクトからJSONPを返すことができるが、私はJSONPラッピング機能が春 - リターン文字列またはJSONObject JSONP

を消えるをwithing文字列を返すようにしてみてください

何私がやっている:

@RequestMapping(value ="/book", produces = {MediaType.APPLICATION_JSON_VALUE, "application/javascript"}) 
    public @ResponseBody ResponseEntity<String> bookInfo() { 
    JSONObject test = new JSONObject(); 
    test.put("uno", "uno"); 
    return new ResponseEntity<String>(test.toString(), HttpStatus.OK); 
} 

コールサービスへ:

http://<server>:port//book?callback=test 

戻り値:

{"uno":"uno"} 

期待される結果:

test({"uno":"uno"}) 

はまた、直接JSONObject ResponseEntity.accepted().body(test);を返すようにしようとしたが、私は406エラーを得ました。何か案は?

答えて

1

エラーは、JsonpAdviceからthis exampleのように表示されますが、リクエストマッピングでは使用できません。それはここで同様の利用があり、HashMapのは、この例で使用することがより簡単ですので、

@ControllerAdvice 
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice { 
    public JsonpAdvice() { 
     super("callback"); 
    } 
} 

私は、HashMapを使用:

@RequestMapping(value="/book", produces=MediaType.APPLICATION_JSON) 
public ResponseEntity<Map> bookInfo() { 
    Map test = new HashMap(); 
    test.put("uno", "uno"); 
    return ResponseEntity.accepted().body(test); 
} 

これは、結果を提供してくれまし:

// http://localhost:8080/book?callback=test 

/**/test({ 
    "uno": "uno" 
}); 

私は春のブートを使用していた:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.1.RELEASE</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>javax.ws.rs-api</artifactId> 
     <version>2.0</version> 
    </dependency> 
</dependencies> 
+0

私はtr私がJSONObjectを返すとき、応答は406エラーコードです – EsteBusta

+0

私はクラスパスに 'JsonpAdvice'クラスを持っていなかったときと同じエラーが出ました。 JSONObjectをシリアル化するようにSpringを設定しなかったので、私は500回のエラーを出し始めました。そこで、Jsonに簡単に変換できるHashMapに切り替えました。この例では、具体的に型を宣言しています。私はこれを含む答えを更新します。 – James

+0

ありがとう、実際にはHashMapに切り替える方法は私がそれを使用した、私はもう少し検索を再現しJSONObjectはあなたが言及したようにシリアル化することはできません実現! – EsteBusta

関連する問題