非常便捷的Spring mvc更新持久对象数据方法

@Controller
@RequestMapping("/user")
public class UserController {

    private UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    /**
     * @param username
     * @return 根据user从持久层获取用户信息, username==null则返回一个新的user对象,否则从持久层加载User的信息
     */
    @ModelAttribute("user")
    public User loadModel(@RequestParam(value = "username", required = false) String username) {
        return username == null ? createUser() : userRepository.loadUserByUsername(username);
    }

    /**
     * @return 当username未提供时, 将返回一个新的User对象,
     *         因为模型在调用了{@link UserController#loadModel} 方法之后,
     *         {@link org.springframework.web.method.annotation.ModelAttributeMethodProcessor}不会再为{@link UserController#save(com.feexon.domain.User)}方法创建User实例
     */
    private User createUser() {
        return new User();
    }

    /**
     * 设置@ModelAttribute("user")绑定的属性,其他属性将被忽略
     *
     * @param binder
     */
    @InitBinder("user")
    public void setBindingProperties(DataBinder binder) {
        binder.setAllowedFields("password");
    }

    @RequestMapping("/save")
    @ResponseBody
    public User save(@ModelAttribute("user") User user) {
        if (hasRegistered(user)) {
            userRepository.saveUser(user);
        }
        return user;
    }

    /**
     * 当user未注册时,{@link UserController#loadModel(java.lang.String)}返回的值为null.
     *
     * @param user
     * @return
     */
    private boolean hasRegistered(User user) {
        return user != null;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值