Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring版本更改导致RESTful函数中断_Java_Spring_Rest - Fatal编程技术网

Java Spring版本更改导致RESTful函数中断

Java Spring版本更改导致RESTful函数中断,java,spring,rest,Java,Spring,Rest,在升级我的应用程序以使用我可用的最新版本Spring(3.1.1)时,我发现我的一个REST调用抛出404错误(以前它非常成功)。我已经验证了切换回旧库(3.0.3)是可行的,而切换回新库是失败的,所有这些都没有改变我的代码 @Controller @RequestMapping("/group/{groupId}/template") public class TemplateController extends AbstractController { ... @Reque

在升级我的应用程序以使用我可用的最新版本Spring(3.1.1)时,我发现我的一个REST调用抛出404错误(以前它非常成功)。我已经验证了切换回旧库(3.0.3)是可行的,而切换回新库是失败的,所有这些都没有改变我的代码

@Controller
@RequestMapping("/group/{groupId}/template")
public class TemplateController extends AbstractController {
    ...

    @RequestMapping(value="/{templateId}", method=RequestMethod.GET) @ResponseBody
    public Template getTemplate(ServletWebRequest request, 
            @PathVariable("groupId") int groupId, 
            @PathVariable("templateId") int templateId) throws Exception {
        ...
    }

    ...

    @RequestMapping(value="/{templateId}", method=RequestMethod.DELETE) @ResponseBody
    public Task getTemplate(ServletWebRequest request, 
            @PathVariable("groupId") int groupId, 
            @PathVariable("templateId") int templateId) throws Exception {
        ...
    }

    ...
}
我把GET方法放在那里只是为了比较,它是有效的。但是,当我请求DELETE方法时(同样,该方法过去是有效的),我会在日志中返回一个错误,说明:

WARNING: No mapping found for HTTP request with URI [/*appname*/group/1/template/group/1/template/1] in DispatcherServlet with name '*appname*'

现在,错误显然是正确的,我没有任何与该映射相关的URI,但是为什么它试图找到该映射而不是指定的映射(
/*appname*/group/1/template/1
)?

通过删除方法@RequestMapping的值中的/in,将其作为根try映射处理

@RequestMapping(value="{templateId}", method=RequestMethod.DELETE) @ResponseBody
    public Task getTemplate(ServletWebRequest request, 
            @PathVariable("groupId") int groupId, 
            @PathVariable("templateId") int templateId) throws Exception {
        ...
    }

它通过删除方法@RequestMapping的值中的/来将/作为根try映射处理

@RequestMapping(value="{templateId}", method=RequestMethod.DELETE) @ResponseBody
    public Task getTemplate(ServletWebRequest request, 
            @PathVariable("groupId") int groupId, 
            @PathVariable("templateId") int templateId) throws Exception {
        ...
    }

我仍然不确定为什么会出现这样的错误,所以深入了解Spring的内部工作原理是很有必要的,但我确实找到了导致它的原因。与其他方法相比,该方法唯一的不同之处在于它抛出了一个异常,而其他方法则没有。在注释掉ExceptionHandler后,函数注册正确

@ExceptionHandler(Exception.class)
public Map<String, String> handleExceptions(Exception e) {
    ...
}
@ExceptionHandler(Exception.class)
公共地图句柄异常(异常e){
...
}

我仍然不知道这为什么会导致错误,但讽刺的是,这就是我首先升级库的原因:以便异常处理能够正常工作。在我向函数中添加了
@ResponseBody
之后(我本来打算这么做),一切都正常了。

我仍然不确定为什么会出现错误,因此希望能够深入了解Spring的内部工作原理,但我确实找到了导致错误的原因。与其他方法相比,该方法唯一的不同之处在于它抛出了一个异常,而其他方法则没有。在注释掉ExceptionHandler后,函数注册正确

@ExceptionHandler(Exception.class)
public Map<String, String> handleExceptions(Exception e) {
    ...
}
@ExceptionHandler(Exception.class)
公共地图句柄异常(异常e){
...
}

我仍然不知道这为什么会导致错误,但讽刺的是,这就是我首先升级库的原因:以便异常处理能够正常工作。在我向函数中添加了
@ResponseBody
之后(我本来打算这么做),一切都正常了。

我无法在Spring MVC 3.1.1中复制这种行为(包括GET和DELETE调用),你能检查一下客户端是否发送了不同的东西吗?@Biju Kunjummen我正在使用Linux的curl发送这些调用,所以客户端问题不应该是问题所在。另外,我还有其他的控制器与此功能相匹配,只是针对不同的项目,它们工作得很好。我甚至从一个正在工作的控制器中获取了DELETE函数并将其粘贴到这个控制器中,得到了相同的错误。我无法用Spring MVC 3.1.1复制这种行为(GET和DELETE调用),你能检查一下客户端是否发送了不同的东西吗?@Biju Kunjummen我正在使用Linux的curl发送这些调用,因此,客户问题不应该成为问题。另外,我还有其他的控制器与此功能相匹配,只是针对不同的项目,它们工作得很好。我甚至从一个正在工作的控制器中获取了DELETE函数,并将其粘贴到这个控制器中,得到了相同的错误。这是一个很好的想法,但最终得到了相同的、精确的结果。我试着去理解(见第16.3.2节)。还有,为什么要用它工作,而不是删除?这是一个很好的想法,但我最终得到了相同的,确切的结果。我试着去理解(见第16.3.2节)。还有,为什么GET会使用它,而不是DELETE?