@Controller
アノテーションを使用して@ResponseBody
メソッドからjsonを返す方法に精通しています。
今、私は自分のコントローラーにいくつかのjson引数を読み取ろうとしていますが、まだ運がありません。これが私のコントローラーの署名です。
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") @RequestBody SearchRequest json) {
しかし、このメソッドを呼び出そうとすると、springは次のように文句を言います:Failed to convert value of type 'Java.lang.String' to required type 'com.foo.SearchRequest'
@RequestBody
注釈を削除しても違いはないようです。
Jsonの手動解析は機能するため、Jacksonはクラスパスに含まれている必要があります。
// This works
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") String json) {
SearchRequest request;
try {
request = objectMapper.readValue(json, SearchRequest.class);
} catch (IOException e) {
throw new IllegalArgumentException("Couldn't parse json into a search request", e);
}
何か案は?サポートされていないことをしようとしていますか?
クライアント側でjqueryを使用している場合、これは私のために働いた:
Java:
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestBody SearchRequest json) {
Jquery(JSON.stringify関数を使用するには、Douglas Crockfordのjson2.jsを含める必要があります):
$.ajax({
type: "post",
url: "sync", //your valid url
contentType: "application/json", //this is required for spring 3 - ajax to work (at least for me)
data: JSON.stringify(jsonobject), //json object or array of json objects
success: function(result) {
//do nothing
},
error: function(){
alert('failure');
}
});