HTTP 400的Spring MVC自定义消息
问题内容:
我下面有几种SprigMVC方法,返回ModelAndView或Responsebody。当用户向这些网址请求缺少必需参数的请求时,他们自然会收到消息
“不存在必需的字符串参数’id’” 。
从安全角度来看,我想向用户 隐藏此详细描述消息
。因此,黑客不容易知道丢失的参数,并且会在没有任何描述的情况下得到400错误。这是可以通过spring配置/ Spring
Security实现的,还是我必须手动重构所有方法才能以某种方式返回自定义消息。
@RequestMapping(value = "/payment", method = RequestMethod.GET)
public ModelAndView getReponse(@RequestParam(value = "id", required = true)) {
return model;
}
@RequestMapping(value = "/status", method = RequestMethod.GET)
public @ResponseBody String getStatus(@RequestParam(value = "id", required = true) String id) {
return "string";
}
问题答案:
您真正需要的是MissingServletRequestParameterException的全局处理程序,当缺少请求参数时,Spring会抛出该全局处理程序。解决此问题的最简单方法是使用ControllerAdvice,它将对所有控制器进行处理。
import org.springframework.web.bind.MissingServletRequestParameterException;
@ControllerAdvice
class MissingServletRequestParameterExceptionHandler {
@ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleMissingParameter() {
return "Your custom result";
}
}
如果只想为特定控制器隐藏缺少的参数消息,则只需将handleMissingParameter
方法移至该控制器,而不创建ControllerAdvice。