簡體   English   中英

Spring @MVC和@RequestParam驗證

[英]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 @InitBindervalue指定將該服務應用於的特定參數:

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM