LoginSignup
30
29

More than 5 years have passed since last update.

Spring MVC でモデルのフィールド名とリクエストパラメータ名が異なる場合のバインド方法

Last updated at Posted at 2014-08-19

リクエストパラメータをモデルにバインドする時、フロント側フレームワークの都合等でリクエストパラメータ名をモデルのフィールド名と合せる事ができない場合がある。

そんな時には、以下の方法で名前の異なるフィールドに強引にバインドする事ができる。

  1. @InitBinderメソッドを作成する。
  2. PropertyValuesのインスタンスを作成し、バインドしたいリクエストパラメータを追加する。
  3. この際、addメソッドの第一引数はバインドしたいモデルのフィールド名にする。
  4. WebInitBinder.bind()を呼び出す。

例 : リクエストパラメータusernameをUserクラスのnameフィールドにバインドする

User.java
@Data
public class User {
    @NotNull
    private String name;
}
UserController.java

@Controller
public class UserController {

    @ModelAttribute("user")
    public User newUser() {
        return new User();
    }

    @InitBinder("user")
    public void bindUser(WebDataBinder binder, HttpServletRequest request) {
        //リクエストパラメータ"username"をプロパティ名"name"にバインド
        MutablePropertyValues pvs = new MutablePropertyValues();
        pvs.add("name", request.getParameter("username"));
        binder.bind(pvs);
    }

    @RequestMapping("/")
    @ResponseBody
    public String index(@Validated @ModelAttribute User user, BindingResult errors) {
        if (errors.hasErrors()) {
            return errors.toString();
        }
        return "name:" + user.getName();
    }
/?username=hogeでリクエストした結果
name:hoge
30
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
29