[英]Spring @MVC and @RequestParam validation
我想像這樣使用@RequestParam注釋:
@RequestMapping
public void handleRequest( @RequestParam("page") int page ) {
...
}
但是,如果用戶擺弄URL參數並嘗試轉到頁面“abz”或非數字的東西,我想顯示第1頁。 現在,我可以讓Spring做的最好的事情是返回500.有沒有辦法干凈地覆蓋這個行為,而不必將參數作為字符串接受?
我查看了@ExceptionHandler注釋,但是當我設置使用@ExceptionHandler(TypeMismatchException.class)
時它似乎沒有做任何事情。 不知道為什么不。
建議?
PS Bonus問題:Spring MVC被稱為Spring MVC。 帶有注釋的Spring MVC是否叫做Spring @MVC? 谷歌將它們視為同名,這很煩人。
ConversionService
是一個很好的解決方案,但如果你給你的請求一個空字符串,它缺少一個值?page=
根本不調用ConversionService,但是page
設置為null
(如果是Integer
)或者Exception是拋出(如果是int
)
這是我的首選解決方案:
@RequestMapping
public void handleRequest( HttpServletRequest request ) {
int page = ServletRequestUtils.getIntParameter(request, "page", 1);
}
這樣,您始終擁有有效的int參數。
從Spring 3.0開始,您可以設置ConversionService
。 @InitBinder
的value
指定將該服務應用於的特定參數:
@InitBinder("page")
public void initBinder(WebDataBinder binder) {
FormattingConversionService s = new FormattingConversionService();
s.addFormatterForFieldType(Integer.class, new Formatter<Integer>() {
public String print(Integer value, Locale locale) {
return value.toString();
}
public Integer parse(String value, Locale locale)
throws ParseException {
try {
return Integer.valueOf(value);
} catch (NumberFormatException ex) {
return 1;
}
}
});
binder.setConversionService(s);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.