web-dev-qa-db-ja.com

必要なリクエスト本文のコンテンツがありません:org.springframework.web.method.HandlerMethod $ HandlerMethodParameter

JSONデータをJSPからResponseBodyのコントローラーに渡すエラー。

07:13:53.919 DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolving exception from handler [public com.chaitanya.ajax.AjaxResponse com.chaitanya.web.controller.DepartmentController.addDepartment(com.chaitanya.ajax.AjaxResponse)]: 

org.springframework.http.converter.HttpMessageNotReadableException: Required request body content is missing: org.springframework.web.method.HandlerMethod$HandlerMethodParameter@98d8d36c
07:13:54.106 DEBUG o.s.w.s.m.a.ResponseStatusExceptionResolver - Resolving exception from handler [public com.chaitanya.ajax.AjaxResponse com.chaitanya.web.controller.DepartmentController.addDepartment(com.chaitanya.ajax.AjaxResponse)]: org.springframework.http.converter.HttpMessageNotReadableException: Required request body content is missing: org.springframework.web.method.HandlerMethod$HandlerMethodParameter@98d8d36c
07:13:54.125 DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolving exception from handler [public com.chaitanya.ajax.AjaxResponse com.chaitanya.web.controller.DepartmentController.addDepartment(com.chaitanya.ajax.AjaxResponse)]: org.springframework.http.converter.HttpMessageNotReadableException: Required request body content is missing: org.springframework.web.method.HandlerMethod$HandlerMethodParameter@98d8d36c
07:1

Ajaxコール:

$.ajax({ 
                        url: "/BusinessReimbursment/addDepartment", 
                        method: 'POST', 
                        dataType: 'json', 
                        data: "{\"message\":\"abc\",\"success\":true}",
                        contentType: 'application/json',
                        mimeType: 'application/json',
                        success: function(data) { 
                            alert(data.id + " " + data.name);
                            commit(true);
                        },
                        error:function(data,status,er) { 
                            alert("error: "+data+" status: "+status+" er:"+er);
                        }
                    });

コントローラ:

@RestController
public class DepartmentController {

    @Autowired 
    @Qualifier("departmentService")
    private DepartmentService departmentService;

    @RequestMapping(value="/addDepartment", method={RequestMethod.POST})
    public @ResponseBody AjaxResponse addDepartment(@RequestBody AjaxResponse  departmentDTO){
        AjaxResponse response=new AjaxResponse();
        return response;
    }

AppConfig.Java

@豆

public RequestMappingHandlerAdapter  annotationMethodHandlerAdapter()
{
    final RequestMappingHandlerAdapter annotationMethodHandlerAdapter = new RequestMappingHandlerAdapter();
    final MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter = new MappingJackson2HttpMessageConverter();

    List<HttpMessageConverter<?>> httpMessageConverter = new ArrayList<HttpMessageConverter<?>>();
    httpMessageConverter.add(mappingJacksonHttpMessageConverter);

    String[] supportedHttpMethods = { "POST", "GET", "HEAD" };

    annotationMethodHandlerAdapter.setMessageConverters(httpMessageConverter);
    annotationMethodHandlerAdapter.setSupportedMethods(supportedHttpMethods);

    return annotationMethodHandlerAdapter;
}

それから抜け出すのを助けてください。 Spring 4、jakson 2.3.0を使用しています

POSTリクエストしようとすると:org.springframework.web.HttpRequestMethodNotSupportedException:サポートされていないリクエストメソッド「POST」

19
chaitanya dalvi

申し訳ありませんが、実際にはcsrfトークンが必要だったため、その問題が発生していました。私は春のセキュリティを実装しており、csrfは有効になっています。そして、ajax呼び出しを通じて、csrfトークンを渡す必要があります。

1
chaitanya dalvi

HTTP GETリクエストでリクエスト本文を送信しないでください。 POSTのみをサポートするようにaddDepartment()を変更し、そのエンドポイントに対してPOST JSONを使用してください。部門に関する情報を取得する場合は、別個のコントローラーを作成する必要があります。それを行うメソッド(およびリクエスト本文を必要としません)。

また、$.ajax呼び出しで「払い戻し」のつづりを間違えたため、エンドポイント定義を再確認してください。

28
ach

私も同じ問題を抱えていました。 JSONリクエストには「Postman」を使用します。コード自体は間違っていません。コンテンツタイプをJSON(application/json)そして、以下の画像に見られるように、うまくいきました。

My Code

6
Rujal Shrestha

これを試して:

@RequestBody(required = false)文字列str

2
Juan

私はあなたのコードにいくつかの小さな変更を加え、私が持っている春のプロジェクトでテストし、それが機能します。ロジックはPOSTでのみ動作しますGETを使用する場合は無効なリクエストでエラーがスローされますまた、ajaxの呼び出しでcommit(true)をコメントアウトし、ブラウザーデバッガーはフラグが設定され、定義されていないことを示しています。Springプロジェクトのアーキテクチャに合わせてURLを変更します。

 $.ajax({ 
                    url: "/addDepartment", 
                    method: 'POST', 
                    dataType: 'json', 
                    data: "{\"message\":\"abc\",\"success\":true}",
                    contentType: 'application/json',
                    mimeType: 'application/json',
                    success: function(data) { 
                        alert(data.success + " " + data.message);
                        //commit(true);
                    },
                    error:function(data,status,er) { 
                        alert("error: "+data+" status: "+status+" er:"+er);
                    }
                });



@RequestMapping(value="/addDepartment", method=RequestMethod.POST)
  public AjaxResponse addDepartment(@RequestBody final AjaxResponse  departmentDTO)
  {
    System.out.println("addDepartment: >>>>>>> "+departmentDTO);
    AjaxResponse response=new AjaxResponse();
    response.setSuccess(departmentDTO.isSuccess());
    response.setMessage(departmentDTO.getMessage());
    return response;
  }
2
faljbour