gpt4 book ai didi

java - @ModelAttribute 从请求参数填充表单字段而不是支持表单

转载 作者:行者123 更新时间:2023-11-30 05:40:16 25 4
gpt4 key购买 nike

我的问题是:如果请求参数和表单字段具有相同的名称,@ModelAttribute 从请求参数填充表单字段而不是表单 DTO。

示例:我有一个带有名为 name 的输入字段的表单:

<input type="text" name="name" />

给定的表单,其值 name=John,
如果我使用 url 提交表单(Web 方法 POST):http://localhost:8080/user/?name=Michael
我将拥有具有相同名称的查询参数和表单字段。
我期望的是:名称字段应该从表单字段填充,而不是查询参数。

MyForm.java

public class MyForm {
private String name;
private Boolean isMale;
private Byte status;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getIsMale() {
return isMale;
}
public void setIsMale(Boolean isMale) {
this.isMale = isMale;
}
public Byte getStatus() {
return status;
}
public void setStatus(Byte status) {
this.status = status;
}
}

MyController.java

@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/", method = RequestMethod.POST)
public String index(
Model model,
@ModelAttribute("form") MyForm form,
BindingResult bindingResult) {
String name = form.getName(); //this contains value from form: Michael
Boolean isMale = form.getIsMale(); //this contains value from query parameter: true
Byte status= form.getStatus(); //this contains value from form: 1
return "views/index";
}

当我提交包含值的表单时:

name = Michael
isMale = false
status = 1

使用带查询参数的 url:

http://localhost:8080/user/?isMale=true

然后 isMale 将包含值 true,该值从查询参数填充。

我期望的是,isMale 应该包含从表单字段填充的false。如何解决这个问题...?

最佳答案

如果您只想使用请求正文(包含表单数据)来填充 Java 对象,则应该使用 @RequestBody 注释而不是 @ModelAttribute

(顺便说一句,在查询字符串和表单数据中传递相同的参数名称的设计很糟糕。如果可能的话,请进行重构)

关于java - @ModelAttribute 从请求参数填充表单字段而不是支持表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55785018/

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