Java Spring MVC-如何在缺少参数时返回404
当我没有通过所有参数时,我想触发404页。假设我有以下URI:Java Spring MVC-如何在缺少参数时返回404,java,spring-mvc,Java,Spring Mvc,当我没有通过所有参数时,我想触发404页。假设我有以下URI: /myapp/op?param1=1¶m2=2@param3=3 如果参数不正确,则为on;我想返回404页。我试着做: @ResponseStatus(HttpStatus.NOT_FOUND) @RequestMapping(value = "op", params = { "!param1" }) public void missingArg() { } 但我得到一个异常,告诉我处理缺失的第二个和第三个参数
/myapp/op?param1=1¶m2=2@param3=3
如果参数不正确,则为on;我想返回404页。我试着做:
@ResponseStatus(HttpStatus.NOT_FOUND)
@RequestMapping(value = "op", params = { "!param1" })
public void missingArg() {
}
但我得到一个异常,告诉我处理缺失的第二个和第三个参数的方法之间存在歧义
那么,我如何才能做到这一点呢?您不必实现
missingArg()
函数。如果传入请求没有匹配的方法,Spring将处理它并返回一个带有适当状态代码的响应
如果使用注释,Spring将自动将请求参数转换为方法参数:
@RequestMapping(value = "/op")
public void methodWithRequestParams(@RequestParam("param1") String param1,
@RequestParam("param2") String param2,
@RequestParam("param3") String param3) {
// do something with params
}
按照惯例,如果并非所有参数都是请求的一部分,则不会调用methodWithRequestParams()
方法(除非@RequestParam
的required
属性设置为false
)
还请注意,参数不必是字符串。如果您使用的是Spring 3.1,您可以定义一个异常类,如下所示:
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public final class ResourceNotFoundException extends RuntimeException {
// class definition
}
现在,无论何时抛出该异常,Spring都将返回在@ResponseStatus
注释中定义的http状态。例如:
@RequestMapping(value = "/op")
public void methodWithRequestParams(@RequestParam(value = "param1", required = false) String param1,
@RequestParam(value = "param2", required = false) String param2) {
if (param1 == null || param2 == null) {
throw new ResourceNotFoundException();
}
}
每当
param1
或param2
为空时,将返回404
。与matsev在另一个答案的评论中所说的一样,在这种情况下,您不应该使用@ResponseStatus(HttpStatus.not_FOUND)
,而应该使用@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseStatus(HttpStatus.NOT_FOUND)
应该在请求格式正确时使用,但资源不在那里。问题是repsonse代码是400(或404以外的其他代码)-我无法控制返回的响应代码或页面。嗯,400-错误请求
在我看来是比404
更准确的响应代码。所有资源(由/op
url标识)存在后,但请求参数错误,即请求错误。如果您想要一个特定的资源和一个404
响应(如果它不存在的话),我建议您将@RequestMapping(“/op/{id}”)
与注释结合使用。谢谢,这很有效。虽然这个解决方案对我来说有点尴尬,但它完成了任务。如何获得定制的车身/有效载荷