2

我们将 Spring MVC 3.2.3.RELEASE(注释)与谷歌应用引擎 1.8.0 一起使用。

我们添加了一个 StringTrimmerEditor 用于将表单中的空白字符串转换为空值,它工作正常,但作为副作用,在控制器中使用 @RequestParams 的所有方法都期望填充所有 @RequestParams,否则它们会抛出 http 错误 400 . 我们尝试了不同的@RequestParam 设置,例如 (required=false) 和 (defaultValue="some value"),但它不起作用。

这是我们如何使用它

@ControllerAdvice
public class ControllerSetup
{
    @InitBinder
    public void initBinder ( WebDataBinder binder )
    {
        StringTrimmerEditor stringtrimmer = new StringTrimmerEditor(true);
        binder.registerCustomEditor(String.class, stringtrimmer);

    }
}

控制器

@RequestMapping(value="/addreportitems", method=RequestMethod.POST)
    public String saveEditForm(@ModelAttribute DCReport dcReport,
            @ModelAttribute("loggedInEmployee") Employee someEmployee,
            @RequestParam Integer someInteger,
            Model m) {
....
}

如果我们不将 someInteger 放入表单中,则会出现错误 Error 400 Required Integer parameter 'someInteger' is not present

如果我们删除 StringTrimmer,它工作得非常好,我们在这里遗漏了什么吗?非常感谢您提前提供帮助。

4

1 回答 1

1

以下对我有用:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

@ResponseBody
@RequestMapping("/foo")
public String renderFoo(@RequestParam(required=false) String bar) {
    return bar;
}

当您使用required=false.

于 2013-06-24T18:05:38.633 回答