【发布时间】:2016-01-31 17:31:13
【问题描述】:
我有以下 bean:
public class TerminalAdmin {
@Id
@Column(name = "admin_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id")
@SequenceGenerator(name = "user_id", sequenceName = "user_id")
private Long adminId;
@Column(name = "email", nullable = false)
private String email;
@Column(name = "phone")
@Size(max = 255)
private String phone;
@Size(max = 255)
@Column(name = "name")
private String name;
@Column(name = "registration_date")
@Temporal(TemporalType.TIMESTAMP)
private Calendar createDate;
@Column(name = "password", nullable = false)
@Size(min=1, max = 255, message = "введите пароль длиной от 1 до 255 символов")
private String password;
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name = "admin_role", joinColumns = {
@JoinColumn(name = "admin_id", nullable = false) },
inverseJoinColumns = { @JoinColumn(name = "role_id",
nullable = false) })
private Set<AdminRole> adminRoles;
@Column(name = "blocked")
private boolean blocked;
...
}
还有这个:
public class AdminRole {
@Id
@Column(name = "role_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id")
@SequenceGenerator(name = "user_id", sequenceName = "user_id")
private Long id;
@Column(name = "role")
private String role;
....
}
内部控制器:
@RequestMapping(value = "/admin/addNewAdmin")
public String adminUsers(@Valid TerminalAdmin terminalAdmin,
BindingResult bindingResult, ModelMap model, Principal principal, HttpSession session) {
我从客户端发送以下请求:
terminalAdmin 来的方法是这样的
- 为什么 spring 将值写入
role字段? - 如何强制spring将
250/251写入id字段?
附言
我试着写
InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(AdminRole.class, new PropertyEditorSupport() {
public void setAsText(String name) {
....
}
});
}
但是setAsText 方法没有调用。
【问题讨论】:
-
您遗漏了一些重要信息。 Spring 不会为字段随机分配值。
AdminRole可能有一个转换器或类似的东西。 -
@zeroflagL 实际上这段代码是很久以前写的。我在哪里可以找到这样的东西?
-
不幸的是,转换数据或自定义绑定的方法不止一种。唯一可靠的方法是搜索对
AdminRole的引用。也许AdminRole有一个构造函数期望String。 -
@zeroflagL 删除构造函数后 - 一切正常
标签: java spring spring-mvc spring-form spring-mvc-initbinders