我有一个Controller类,它的函数可以将记录保存到数据库中。我向Controller函数传递了几个参数,但是我想我可能写错了@RequestMapping。下面是代码
控制器
@RequestMapping(value="createRoadBlock.htm", method = RequestMethod.POST)
public @ResponseBody Integer createRoadBlock(@RequestParam String purpose, @RequestParam String userName,
@RequestParam int status, @RequestParam double latAdd,
@RequestParam double longAdd, HttpServletRequest request,
HttpServletResponse response) {
int roadBlockId = 0;
try{
roadBlockId = roadBlockManager.saveRoadBlock(purpose, userName, status,latAdd,longAdd);
logger.info("Create Road Block Successful roadBlockId "+ roadBlockId);
return roadBlockId;
}catch(Exception e){
logger.error("Exception Occured In Road Block Controller "+e.getMessage());
return roadBlockId;
}
}Ajax请求
$.ajax({
type:'POST',
url:'createRoadBlock.htm',
contentType:"application/json",
async:false,
cache:false,
data:{purpose:f_purpose, userName:f_userName,status: f_status,latAdd: f_latAdd, longAdd:f_lngAdd},
dataType:'json'
}).success(function(recordId){
console.log('Road Block created with id ' + recordId);
});错误日志
Controller [com.crimetrack.web.RoadBlockController]
Method [public java.lang.Integer com.crimetrack.web.RoadBlockController.createRoadBlock(java.lang.String,java.lang.String,int,double,double,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)]
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'purpose' is not present
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:201)
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:90)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)发布于 2013-11-06 02:50:21
@PathVariable用于告诉Spring URI路径的一部分是希望传递给方法的值。这是您想要的吗?还是这些变量应该是表单数据发布到URI?
如果您想要表单数据,请使用@RequestParam而不是@PathVariable。
如果您想要@PathVariable,您需要在@RequestMapping条目中指定占位符,以告诉Spring路径变量在URI中的位置。例如,如果要提取名为contentId的路径变量,可以使用:
@RequestMapping(value = "/whatever/{contentId}", method = RequestMethod.POST)
编辑:另外,如果路径变量可以包含“.”如果你想要数据的那一部分,那么你需要告诉Spring抓取所有东西,而不仅仅是‘.’之前的东西:
@RequestMapping(value = "/whatever/{contentId:.*}", method = RequestMethod.POST)
这是因为Spring的默认行为是将URL的这一部分视为文件扩展名,并将其排除在变量提取之外。
发布于 2020-02-02 14:53:25
我得到这个错误是因为一个愚蠢的错误,@PathVariable中的变量名与@RequestMapping中的变量名不匹配
例如
@RequestMapping(value = "/whatever/{**contentId**}", method = RequestMethod.POST)
public … method(@PathVariable Integer **contentID**){
}它可能会帮助别人
发布于 2021-01-25 01:36:52
当您在REST定义中定义的变量与@PathVariable名称不匹配时,可能会发生此错误。
示例:假设您在REST定义中定义了
@GetMapping(value = "/{appId}", produces = "application/json", consumes = "application/json")那么在函数的定义过程中,应该是
public ResponseEntity<List> getData(@PathVariable String appId)如果使用REST控制器定义中使用@PathVariable定义的任何其他变量,则可能会发生此错误。类似地,下面的代码将引发错误,因为ID与appId变量名不同:
public ResponseEntity<List> getData(@PathVariable String ID)https://stackoverflow.com/questions/19803117
复制相似问题