每当我没有通过所有参数时,我想触发404页面.假设我有以下URI:
/myapp/op?param1=1¶m2=2@param3=3
Run Code Online (Sandbox Code Playgroud)
如果参数wasn; t调用,我想返回404页面.我试过做:
@ResponseStatus(HttpStatus.NOT_FOUND)
@RequestMapping(value = "op", params = { "!param1" })
public void missingArg() {
}
Run Code Online (Sandbox Code Playgroud)
但后来我得到一个例外,告诉我处理丢失的第二个和第三个参数的方法之间存在歧义.
那我怎么能做到这一点呢?
Tim*_*ote 27
如果你使用的是Spring 3.1,你可以像这样定义一个异常类:
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public final class ResourceNotFoundException extends RuntimeException {
// class definition
}
Run Code Online (Sandbox Code Playgroud)
现在,无论何时抛出该异常,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();
}
}
Run Code Online (Sandbox Code Playgroud)
将返回404when param1或param2null.
您不必实现该missingArg()功能.如果传入请求没有匹配方法,那么Spring的HandlerExceptionResolver将处理它并返回带有适当状态代码的响应.
如果使用@RequestParam注释,Spring将自动将请求参数转换为方法参数:
@RequestMapping(value = "/op")
public void methodWithRequestParams(@RequestParam("param1") String param1,
@RequestParam("param2") String param2,
@RequestParam("param3") String param3) {
// do something with params
}
Run Code Online (Sandbox Code Playgroud)
按照惯例,methodWithRequestParams()如果并非所有参数都是请求的一部分,则不会调用该方法(除非将该required属性@RequestParam设置为false).
另请注意,参数不必是字符串.
| 归档时间: |
|
| 查看次数: |
18470 次 |
| 最近记录: |