pee*_*ech 19 java spring spring-mvc
考虑以下映射:
@RequestMapping(value = "/superDuperPage", method = RequestMethod.GET)
public String superDuperPage(@RequestParam(value = "someParameter", required = true) String parameter)
{
return "somePage";
}
Run Code Online (Sandbox Code Playgroud)
我想通过不改变来处理缺少参数的情况required = false.默认情况下400会返回错误,但我想返回让我们说一个不同的页面.我怎么做到这一点?
Ali*_*ani 35
如果@RequestParam请求中不存在required ,Spring将抛出MissingServletRequestParameterException异常.您可以@ExceptionHandler在同一个控制器或a中定义一个@ControllerAdvice以处理该异常:
@ExceptionHandler(MissingServletRequestParameterException.class)
public void handleMissingParams(MissingServletRequestParameterException ex) {
String name = ex.getParameterName();
System.out.println(name + " parameter is missing");
// Actual exception handling
}
Run Code Online (Sandbox Code Playgroud)
我想回来让我们说一个不同的页面.我怎么做到这一点?
正如Spring文档所述:
与使用
@RequestMapping注释注释的标准控制器方法非常相似,方法的方法参数和返回值@ExceptionHandler可以是灵活的.例如,HttpServletRequest可以在Servlet环境和PortletRequestPortlet环境中访问.返回类型可以是aString,它被解释为视图名称,ModelAndView对象,aResponseEntity,或者您还可以添加@ResponseBody要使用消息转换器转换的方法返回值并将其写入响应流.
替代
如果您在类上使用@ControllerAdvice,并且它扩展了Spring基类ResponseEntityExceptionHandler。为此,已在基类上创建了预定义的函数。您必须在处理程序中覆盖它。
@Override
protected ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
String name = ex.getParameterName();
logger.error(name + " parameter is missing");
return super.handleMissingServletRequestParameter(ex, headers, status, request);
}
Run Code Online (Sandbox Code Playgroud)
该基类非常有用,尤其是在您要处理框架创建的验证错误时。
| 归档时间: |
|
| 查看次数: |
28953 次 |
| 最近记录: |