gpt4 book ai didi

java - 当我们要使用 Spring @ModelAttribute 时,我们是否需要为 http get 和 post 提供类似的 @RequestMapping 值

转载 作者:行者123 更新时间:2023-12-01 13:07:32 25 4
gpt4 key购买 nike

这个问题长期以来一直困扰着我。

假设我有一个索引页面,其中有登录表单。

我注意到,为了处理 @ModelAttribute 我应该首先在传入的 Http-GET 请求中实例化模型的对象:

@RequestMapping(value="/index", method=RequestMethod.GET)
public String renderHomePage(@ModelAttribute("userCredential") UserCredential userCredential, ....){
return "index-page";
}

然后,当我使用 HTTP-POST 发布表单时,我可以获取我的对象:

@RequestMapping(value="/index", method=RequestMethod.POST)
public String checkCredential(@ModelAttribute("userCredential") UserCredential userCredential, ....){
//do some user credential checking
return "faileOrSuccessPage";
}

并且两种方法必须具有相同的 @RequestMapping 值才能使提交表单正常工作。

现在我有几个问题:

  1. 假设我的索引页(value="/index", method=RequestMethod.GET)每天有10000次点击,这是否意味着对于每个到来的get请求,都有一个对象UserCredential 将被创建? (我想了解对象生命周期)

  2. 是否有任何方法可以让我们仅在第二个方法(checkCredential)中绑定(bind)一个@ModelAttribute对象(当我们想要提交表单时)?

    <
  3. 如果就我而言,我只需使用 @RequestParam 来获取输入值,那么如何在不使用 BindingResult 的情况下验证 @RequestParam 并将它们返回到 View 中进行显示?

最佳答案

关于您的问题:

.1。假设我的索引页面(value =“/index”,method = RequestMethod.GET)每天有10000次点击,这是否意味着对于每个即将到来的get请求,都会创建一个UserCredential对象? (我想了解对象生命周期)

是的,但它与 http 请求范围相关,并且一旦呈现页面,该对象就有资格进行垃圾回收。 10000 对于 JVM 来说是一个相当小的数字。

.2。是否有任何方法可以让我们仅使用第二个方法(checkCredential)绑定(bind) @ModelAttribute 对象(仅当我们要提交表单时)?

取决于您的流程 - 我假设您正在使用 spring 表单标签,如果用户或密码不符合您的某些标准,则向用户显示验证错误,如果是这样的话需要设置 @ModelAttribute 以在重定向回索引页面时填充域对象。另一方面,如果您不打算使用用户设置的原始值向用户显示反馈,那么您不需要设置 ModelAttribute,您可以完全忽略它并使用正常的 form html 元素而不是 spring 标签。

.3。如果在我的情况下,我只需要使用 @RequestParam 来获取我的输入值,那么如何在不使用 BindingResult 的情况下验证 @RequestParam 并将它们返回到 View 中进行显示?

我不建议这样做,包装类型更好,并且将使用注册的 validator 进行验证,并且 BindingResult 将清楚地包含您可以直接转移到的验证错误用户界面。如果您绝对想自己验证@RequestParam,您可以自己调用 validator 。有多种方法可以设置更多模型属性来带回验证异常并呈现在 UI 上。

关于java - 当我们要使用 Spring @ModelAttribute 时,我们是否需要为 http get 和 post 提供类似的 @RequestMapping 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23154020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com