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」
申し訳ありませんが、実際にはcsrfトークンが必要だったため、その問題が発生していました。私は春のセキュリティを実装しており、csrfは有効になっています。そして、ajax呼び出しを通じて、csrfトークンを渡す必要があります。
HTTP GETリクエストでリクエスト本文を送信しないでください。 POSTのみをサポートするようにaddDepartment()
を変更し、そのエンドポイントに対してPOST JSONを使用してください。部門に関する情報を取得する場合は、別個のコントローラーを作成する必要があります。それを行うメソッド(およびリクエスト本文を必要としません)。
また、$.ajax
呼び出しで「払い戻し」のつづりを間違えたため、エンドポイント定義を再確認してください。
これを試して:
@RequestBody(required = false)文字列str
私はあなたのコードにいくつかの小さな変更を加え、私が持っている春のプロジェクトでテストし、それが機能します。ロジックは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;
}