缺少必需的请求正文内容:org.springframework.web.method.HandlerMethod$HandlerMethodParameter
Required request body content is missing: 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请求它gives:org。springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法'POST'
您不应使用 HTTP GET 请求发送请求正文。您应该修改 addDepartment()
,使其仅支持 POST,并且 POST 您的 JSON 到该端点。如果您想获取有关部门的信息,您应该创建一个单独的控制器方法来执行此操作(并且不需要请求主体)。
此外,请仔细检查您的端点定义,因为您在 $.ajax
调用中拼错了 "reimbursement"。
我对您的代码进行了一些小修改,并使用我拥有的 spring 项目对其进行了测试并且它有效,如果我使用 GET,逻辑将仅适用于 POST,它会抛出错误请求无效。同样在您的 ajax 调用中,我注释掉了 commit(true)、浏览器调试器标记和未定义的错误。只需修改 url 以适应您的 Spring 项目架构。
$.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 安全并且启用了 csrf。通过 ajax 调用我需要传递 csrf 令牌。
我也遇到了同样的问题。我将 "Postman" 用于 JSON 请求。代码本身并没有错。我只是将内容类型设置为 JSON (application/json
) 并且它起作用了,如下图所示
试试这个:
@RequestBody(required = false) 字符串 str
如果它在 Postman 中运行,请尝试新的 Spring 版本,因为 'org.springframework.boot' 2.2.2.RELEASE 版本可能会抛出 "Required request body content is missing" 异常。
尝试 2.2.6.RELEASE 版本。
我这边是POSTMAN设置问题,不知道为什么,可能是抄别人的query吧。我只是在 POSTMAN 中创建了一个新请求,然后 运行 它成功了。
将 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请求它gives:org。springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法'POST'
您不应使用 HTTP GET 请求发送请求正文。您应该修改 addDepartment()
,使其仅支持 POST,并且 POST 您的 JSON 到该端点。如果您想获取有关部门的信息,您应该创建一个单独的控制器方法来执行此操作(并且不需要请求主体)。
此外,请仔细检查您的端点定义,因为您在 $.ajax
调用中拼错了 "reimbursement"。
我对您的代码进行了一些小修改,并使用我拥有的 spring 项目对其进行了测试并且它有效,如果我使用 GET,逻辑将仅适用于 POST,它会抛出错误请求无效。同样在您的 ajax 调用中,我注释掉了 commit(true)、浏览器调试器标记和未定义的错误。只需修改 url 以适应您的 Spring 项目架构。
$.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 安全并且启用了 csrf。通过 ajax 调用我需要传递 csrf 令牌。
我也遇到了同样的问题。我将 "Postman" 用于 JSON 请求。代码本身并没有错。我只是将内容类型设置为 JSON (application/json
) 并且它起作用了,如下图所示
试试这个:
@RequestBody(required = false) 字符串 str
如果它在 Postman 中运行,请尝试新的 Spring 版本,因为 'org.springframework.boot' 2.2.2.RELEASE 版本可能会抛出 "Required request body content is missing" 异常。
尝试 2.2.6.RELEASE 版本。
我这边是POSTMAN设置问题,不知道为什么,可能是抄别人的query吧。我只是在 POSTMAN 中创建了一个新请求,然后 运行 它成功了。