首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将IP地址绑定到Spring 3 @ModelAttribute?

如何将IP地址绑定到Spring 3 @ModelAttribute?
EN

Stack Overflow用户
提问于 2010-02-25 01:58:29
回答 1查看 2.7K关注 0票数 3

下面是我的方法:

代码语言:javascript
运行
复制
@RequestMapping(value = "/form", method = RequestMethod.POST)
public String create(@ModelAttribute("foo") @Valid final Foo foo,
        final BindingResult result, final Model model) {
    if (result.hasErrors())
      return form(model);
    fooService.store(foo);
    return "redirect:/foo";
}

因此,我需要将IP地址绑定到Foo对象,方法可能是在HttpServletRequest上调用getRemoteAddr()。我尝试过为Foo创建CustomEditor,但这似乎不是正确的方式。@InitBinder看起来更有前途,但我还没有弄清楚是怎么回事。

对象上的IP地址是强制的,Spring结合JSR-303bean验证将会给出一个验证错误,除非它存在。

解决这个问题最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-25 02:25:40

您可以使用@ModelAttribute-annotated方法使用IP地址预填充对象:

代码语言:javascript
运行
复制
@ModelAttribute("foo")
public Foo getFoo(HttpServletRequest request) {
    Foo foo = new Foo();
    foo.setIp(request.getRemoteAddr());
    return foo;
}

@InitBinder("foo")
public void initBinder(WebDataBinder binder) {
    binder.setDisallowedFields("ip"); // Don't allow user to override the value
}

编辑:只使用@InitBinder就可以做到这一点:

代码语言:javascript
运行
复制
@InitBinder("foo")
public void initBinder(WebDataBinder binder, HttpServletRequest request) {
    binder.setDisallowedFields("ip"); // Don't allow user to override the value
    ((Foo) binder.getTarget()).setIp(request.getRemoteAddr());
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2328257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档