【发布时间】:2017-03-14 10:03:56
【问题描述】:
我有一个控制器方法来处理重置密码表单的 POST 请求。该表单有一个用于重置令牌的隐藏输入字段,并提示用户输入新密码。
我想在下面的代码中使用@Valid 注释,但不确定是否可以使用现有的User 类。
Hibernate Validator 是否需要我专门为表单创建一个额外的类?
控制器方法
@RequestMapping(value = "/resetPassword", method = RequestMethod.POST)
public ModelAndView setNewPassword(@RequestParam Map<String,String> requestParams) {
User user = userService.findUserByResetToken(requestParams.get("token"));
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Form data is " + requestParams.get("token") + requestParams.get("password") + user.getEmail());
modelAndView.setViewName("resetPassword");
return modelAndView;
}
用户类
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@Column(name = "email")
@Email(message = "Please provide a valid e-mail")
@NotEmpty(message = "Please provide an e-mail")
private String email;
@Column(name = "password")
@Size(min = 8, max = 72, message = "Your password must be between 8 and 72 characters long")
@NotEmpty(message = "Please provide a password")
@Transient
private String password;
@Column(name = "first_name")
@NotEmpty(message = "Please provide your first name")
private String firstName;
@Column(name = "last_name")
@NotEmpty(message = "Please provide your last name")
private String lastName;
@Column(name = "enabled")
private boolean enabled;
@Column(name = "confirmation_token")
private String confirmationToken;
@Column(name = "created_on")
private Date createdOn;
@Column(name = "last_login")
private Date lastLogin;
@Column(name = "reset_token")
private String resetToken;
// Getters and setters omitted
}
【问题讨论】:
-
您希望验证什么?
token&password来自请求? -
@bureaquete 是的
-
为什么不在你的控制器方法中使用
@RequestBody而直接使用User类呢?然后你可以给它添加@Valid注解,因为表单本质上是User类,对吧?虽然token和reset_token字段名称不同。 -
尽管某些字段会失败,因为您只需要密码,而不需要其他非可选字段,但您应该创建一个单独的
NewPasswordRQ类,并为密码和令牌字段提供适当的注释,并像我一样使用它上面已经解释过了~
标签: java spring hibernate spring-boot