@ModelAttribute заполнить поле формы из параметра запроса вместо вспомогательной формы - PullRequest
1 голос
/ 21 апреля 2019

Моя проблема: @ModelAttribute заполняет поле формы из параметра запроса вместо формы DTO, если параметр запроса и поле формы имеют одно и то же имя.

Пример: у меня есть форма с входным полем под названием name:

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

Данная форма со значением name = John,
Если я отправлю форму (веб-метод POST), используя url: 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, который заполняется из поля формы.Как решить эту проблему ...?

1 Ответ

1 голос
/ 24 апреля 2019

Вы должны использовать аннотацию @RequestBody вместо @ModelAttribute, если вы хотите, чтобы только тело запроса (содержащее данные вашей формы) заполнило ваш объект Java

(в качестве примечания, егоплохой дизайн для передачи одного и того же имени параметра как в строке запроса, так и в данных формы. Выполните рефакторинг, если это возможно)

...