java – Spring MVC缺少URI模板变量

前端之家收集整理的这篇文章主要介绍了java – Spring MVC缺少URI模板变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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,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)

解决方法

@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视为文件扩展名,并将其从变量提取中排除.

原文链接:https://www.f2er.com/java/122173.html

猜你在找的Java相关文章