8

JSON オブジェクトを使用して Spring MVC を使用しています。RESTClient から JSON オブジェクトを送信しようとしているときに、取得しています

HTTP ステータス 400 - クライアントから送信された要求が構文的に正しくありません ()。

これは私のコントローラーです

ObjectMapper mapper=new ObjectMapper();
@RequestMapping(value = "/addTask", method = RequestMethod.GET)
       public ModelAndView addTask(@RequestParam("json") String json) throws JsonParseException, JsonMappingException, IOException 
       {
          System.out.println("Json object from REST : "+json);
          Task task=(Task) mapper.readValue(json, Task);
          service.addService(task);
          return new ModelAndView("Result");
       }

私のリクエストURL:http://localhost:8080/Prime/addTask

私のJsonオブジェクト:

{"taskName":"何もない","taskId":1234,"taskDesc":"何もしていない"}

また、RESTClient で「Content-Type: application/json」を指定しようとしましたが、それでも同じエラーが発生します

4

3 に答える 3

3

これを試して

変化する

@RequestParam("json") String json

 @RequestBody Task task

POST メソッドに興味がない場合は、これを試すことができます

コントローラーメソッドをから変更します

@RequestMapping(value = "/addTask", method = RequestMethod.GET)
   public ModelAndView addTask(@RequestParam("json") String json)

@RequestMapping(value = "/addTask/{taskName}/{taskId}/{taskDesc}", method = RequestMethod.GET)
   public ModelAndView addTask(@RequestParam("taskName") String taskName,
@RequestParam("taskId") String taskId,@RequestParam("taskDesc") String taskDesc)

URLを次のように変更します

http://localhost:8080/Prime/addTask/mytask/233/testDesc
于 2013-01-08T05:43:10.073 に答える
0

私の問題は、@RequestBody オブジェクトのマッピングが正しくないことが原因でした。

私のリクエストボディは次のようになります

{data: ["1","2","3"]}

コントローラーに次のコードがありました

@RequestMapping(value = "/mentee", method = RequestMethod.POST)
public @ResponseBody boolean updateData(@RequestBody List<Integer> objDTO, HttpSession session) {
        ...
    }

Spring は Json データをリストにバインドする方法を認識していないため、これにより HTTP 400 が返されます。

RequestBody オブジェクトを次のように変更しました

@RequestMapping(value = "/mentee", method = RequestMethod.POST)
public @ResponseBody boolean updateData(@RequestBody ObjectiveDto objDTO, HttpSession session) {
        ...
    }

そして ObjectiveDto を次のように定義しました

@ToString
public class ObjectiveDto {

    @Getter @Setter
    private List<Integer> data;

}

これにより、HTTP 400 エラーが解決されました。

于 2015-02-24T19:54:13.970 に答える