にマッピングされた役割を持続することができません、4持つ春のセキュリティを休止私は春の4を使用してアプリケーションを作成していたユーザ
ユーザーが各自に割り当てられた役割を持っていますが、私はそれができない、ユーザーを作成しようとしたとき、それは[@ org.hibernate.validator.constraints.NotEmpty @ javax.persistence.ManyToMany @ javax.persistence.JoinTable com.himanshu役割
Failed to convert property value of type [java.lang.String[]] to required type [java.util.Set] for property userRoles; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type
のフィールドの下にブラウザ上で私に例外を与えているユーザーを保存します。 blogger.model.Role]を値2に設定します。ネストされた例外は、私がロードするためにも、モデルの属性を追加したjava.lang.StackOverflowErrorを
マイUserモデルクラス
@Entity
@Table(name = "BLOG_USER")
public class User {
@Id
@Column(name = "USER_ID")
private String userId;
@NotEmpty
@Column(name = "PASSWORD")
private String password;
@NotEmpty
@Column(name = "FIRST_NAME")
private String firstName;
@NotEmpty
@Column(name = "MIDDLE_NAME")
private String middleName;
@NotEmpty
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "EMAIL")
private String email;
@Column(name = "PHONE")
private String phone;
@NotNull
@Column(name = "STATE")
private Integer state = State.ACTIVE.getState();
@Transient
private String stateName;
@NotEmpty
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USER_ROLE_MAP", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = {
@JoinColumn(name = "ROLE_ID") })
private Set<Role> userRoles = new HashSet<>();
/*skipped getter, setters and some utility methods*/
ロールモデルクラスここでは、新規ユーザーを登録するための
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ROLE_ID")
private Integer roleId;
@Column(name="ROLE_TYPE", length=20, nullable=false, unique=true)
private String roleType=RoleType.USER.getRoleType();
/*skipped getters and setters*/
私のコントローラメソッドであります登録フォームの役割
/**
* This method will provide the medium to add a new user.
* By GET method it will identify that it has to load registration page
*/
@RequestMapping(value = { "/newuser" }, method = RequestMethod.GET)
public String newUser(ModelMap model) {
User user = new User();
model.addAttribute("user", user);
model.addAttribute("edit", false);
return "registration";
}
/**
* This method will be called on form submission, handling POST request for
* saving user in database. It also validates the user input
*/
@RequestMapping(value = { "/newuser" }, method = RequestMethod.POST)
public String saveUser(@Valid User user, BindingResult result, ModelMap model) {
System.out.println("save user : "+user);
if (result.hasErrors()) {
return "registration";
}
if(!userService.isUniqueUser(user.getUserId())){
FieldError userIdError =new FieldError("user","userId",messageSource.getMessage("non.unique.ssoId", new String[]{user.getUserId()}, Locale.getDefault()));
result.addError(userIdError);
return "registration";
}
userService.saveUser(user);
model.addAttribute("success", "User " + user.getFirstName() + " "+ user.getLastName() + " registered successfully");
//return "success";
return "registrationsuccess";
}
@ModelAttribute("blogRoleList")
public List<Role> initializeProfiles() {
return roleService.findAll();
}
私はregisteを持っています私のconfigクラスでこのコンバータを登録Roleオブジェクト
@Component
public class RoleIdtoRoleConverter implements Converter<Object, Role> {
@Autowired
RoleService roleService;
public Role convert(Object roleIdObj) {
System.out.println("covertor called with id " + roleIdObj.toString());
Integer roleId = -1;
try {
roleId = Integer.parseInt((String) roleIdObj);
} catch (NumberFormatException e) {
throw new ConversionFailedException(TypeDescriptor.valueOf(String.class),
TypeDescriptor.valueOf(Role.class), roleIdObj, null);
}
System.out.println("covertor called with id " + roleIdObj.toString());
Role role = roleService.findRoleById(roleId);
System.out.println("Role = " + role);
return role;
}
@Autowired
RoleIdtoRoleConverter roleIdToRoleConverter;
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(roleIdToRoleConverter);
}
登録JSPファイルregistration.jsp
<form:form method="POST" modelAttribute="user" class="form-horizontal">
<%-- <form:input type="hidden" path="userId" id="useId"/> --%>
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="firstName">First Name</label>
<div class="col-md-7">
<form:input type="text" path="firstName" id="firstName" class="form-control input-sm"/>
<div class="has-error">
<form:errors path="firstName" class="help-inline"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="lastName">Last Name</label>
<div class="col-md-7">
<form:input type="text" path="lastName" id="lastName" class="form-control input-sm" />
<div class="has-error">
<form:errors path="lastName" class="help-inline"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="userId">User ID</label>
<div class="col-md-7">
<c:choose>
<c:when test="${edit}">
<form:input type="text" path="userId" id="userId" class="form-control input-sm" disabled="true"/>
</c:when>
<c:otherwise>
<form:input type="text" path="userId" id="userId" class="form-control input-sm" />
<div class="has-error">
<form:errors path="userId" class="help-inline"/>
</div>
</c:otherwise>
</c:choose>
</div>
</div>
</div>
<c:if test="${!edit}">
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="password">Password</label>
<div class="col-md-7">
<form:input type="password" path="password" id="password" class="form-control input-sm" />
<div class="has-error">
<form:errors path="password" class="help-inline"/>
</div>
</div>
</div>
</div>
</c:if>
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="email">Email</label>
<div class="col-md-7">
<form:input type="text" path="email" id="email" class="form-control input-sm" />
<div class="has-error">
<form:errors path="email" class="help-inline"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="userRoles">Roles</label>
<div class="col-md-7">
<form:select path="userRoles" items="${blogRoleList}" multiple="true" itemValue="roleId" itemLabel="roleType" class="form-control input-sm" />
<div class="has-error">
<form:errors path="userRoles" class="help-inline"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-actions floatRight" style="margin-left: 25px">
<c:choose>
<c:when test="${edit}">
<input type="submit" value="Update" class="btn btn-primary btn-sm"/> or <a href="<c:url value='/listUser' />">Cancel</a>
</c:when>
<c:otherwise>
<input type="submit" value="Register" class="btn btn-primary btn-sm"/> or <a href="<c:url value='/listUser' />">Cancel</a>
</c:otherwise>
</c:choose>
</div>
</div>
</form:form>
にロールIDを変換するコンバータを赤しかし、数字にはできませんよそれはデータを保存することができません、私はそれがロールバック空の配列として表示されているコントローラで、ユーザーオブジェクトを印刷した、私はここでいくつかのものを逃していない、任意のヘルプとsuggestio nsが得られるでしょう。ユーザー
抽象DAOクラスに
public class AbstractDao <PK extends Serializable, T>{
private final Class<T> persistantClass;
@Autowired
SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
public AbstractDao() {
this.persistantClass=(Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];
}
public void persistEntity(T entity) {
this.getSession().persist(entity);
}
/* mor emethods to load data on based on object type */
}
ユーザーダオimplimentationのcalss
@Repository("userDao")
public class UserDaoImpl extends AbstractDao<String, User> implements UserDao{
@Override
public void saveUser(User user) {
persistEntity(user);
}
/* more methods for fetching data from db*/
}
感謝を保存するためのコードの追加
。
http://stackoverflow.com/help/mcve ... MINIMALの例を投稿してください。コード全体をダンプする必要はありません。問題を再現するために必要な最小のコードを投稿する必要があります。 – nhouser9
私はこれからいくつかのコードを削除すると、質問が意味をなさないと思います、それは私が思うように既に非常に正確なコードを持っています。 –
@HimanshuMishraコードが正常に見えます。あなたはどのようにユーザーオブジェクトを永続化していますか?ここにそのコードを追加できますか? – Mustafa