필요한 요청 본문 내용이 없습니다. org.springframework.web.method.HandlerMethod$HandlerMethod 파라미터
JSP에서 ResponseBody 컨트롤러로 JSON 데이터를 전달하는 동안 오류가 발생했습니다.
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'는 지원되지 않습니다.
HTTP GET 요청과 함께 요청 본문을 전송해서는 안 됩니다.수정해야 합니다.addDepartment()
따라서 POST만 지원하고 해당 엔드포인트에 JSON을 POST할 수 있습니다.부서에 대한 정보를 가져오려면 이를 수행하는 별도의 컨트롤러 메서드를 생성해야 합니다(요청 본문은 필요하지 않습니다).
또한 "상환"의 철자가 틀렸기 때문에 엔드포인트 정의를 다시 확인하십시오.$.ajax
불러.
저도 같은 문제가 있었어요.JSON 요청에는 "Postman"을 사용합니다.코드 자체는 틀리지 않습니다.콘텐츠 타입을 JSON으로 설정하기만 하면 됩니다.(application/json
아래 이미지에서 볼 수 있듯이 동작했습니다.
이것을 시험해 보세요.
@RequestBody(필수 = false) 문자열 스트링
저는 당신의 코드를 약간 수정하여 가지고 있는 스프링 프로젝트로 테스트했습니다.GET을 사용하면 로직은 POST에서만 동작합니다.부정한 요청과 함께 에러가 발생합니다.또한 Ajax 콜에서 commit(true)을 코멘트 아웃했습니다.브라우저 디버거에 플래그가 붙어 정의되어 있지 않은 에러가 발생했습니다.스프링 프로젝트 아키텍처에 맞게 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;
}
미안해 얘들아..사실 CSRF 토큰이 필요했기 때문에 나는 그 문제를 받고 있었다.spring security를 실장하여 csrf를 유효하게 합니다.그리고 ajax 콜을 통해 csrf 토큰을 전달해야 합니다.
제 입장에서는 POSTMAN 설정 문제 때문인데, 왠지 다른 곳에서 쿼리를 복사하고 있는 것 같습니다.POSTMAN에서 새로운 요청을 생성하여 실행하기만 하면 됩니다.
우체국에서 작동한다면, 'org.spring framework'이기 때문에 새로운 스프링 버전을 사용해 보십시오.2.2.2 를 기동합니다.RELEASE 버전에서는 "Required request body content is missing" 예외가 발생할 수 있습니다.
2.2.6을 시도합니다.릴리즈 버전
언급URL : https://stackoverflow.com/questions/29223683/required-request-body-content-is-missing-org-springframework-web-method-handler
'source' 카테고리의 다른 글
Oracle 열에서 기본값을 제거하려면 어떻게 해야 합니까? (0) | 2023.02.28 |
---|---|
WooCommerce - 여러 지불 방법을 동시에 사용한 지불 주문 (0) | 2023.02.28 |
Ubuntu에 루비 2.2.3이 있는 json gem을 설치할 수 없습니다. (0) | 2023.02.28 |
리액트 라우터는 새로고침 시 동작하지만 링크를 클릭할 때는 동작하지 않는다. (0) | 2023.02.28 |
자체 API 사용 시 무한 AJAX 루프 방지 (0) | 2023.02.28 |