简体   繁体   English

Java,Spring将一个值从类映射到另一个类的值

[英]Java,Spring Map one value from class to value from another class

I'm new to Spring framwork in Java. 我是Java中Spring框架的新手。 And have some problems... 还有一些问题...
My app use spring, spring sequrity, hibernate frameworks. 我的应用程序使用spring,spring sequrity,hibernate框架。
I'm writing some simple application. 我正在写一些简单的应用程序。
I has a page where users can be added through hibernate to db. 我有一个页面,可以通过休眠将用户添加到数据库。
User class: 用户类别:

@Entity
@Table(name="users")
public class User 
{
    @Id
    @GeneratedValue
    private Integer id;

    private String login;

    private String password;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinTable(name="user_roles",
        joinColumns = {@JoinColumn(name="user_id", referencedColumnName="id")},
        inverseJoinColumns = {@JoinColumn(name="role_id", referencedColumnName="id")}
    )
    private Role role;


    private Integer moneyCount;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    public Integer getMoneyCount() {
        return moneyCount;
    }

    public void setMoneyCount(Integer moneyCount) {
        this.moneyCount = moneyCount;
    }
}

Role class: 角色类别:

@Entity
@Table(name="roles")
public class Role {

 @Id
 @GeneratedValue
 private Integer id;

 private String role;

 @OneToMany(cascade=CascadeType.ALL)
 @JoinTable(name="user_roles", 
    joinColumns = {@JoinColumn(name="role_id", referencedColumnName="id")},
    inverseJoinColumns = {@JoinColumn(name="user_id", referencedColumnName="id")}
)
private Set<User> userRoles;

@Override
public int hashCode() {
    return new Long(id).hashCode();
}

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (! (obj instanceof Role)) {
        return false;
    }
    return this.id == ((Role)obj).getId();
}


public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getRole() {
    return role;
}

public void setRole(String role) {
    this.role = role;
}

public Set<User> getUserRoles() {
    return userRoles;
}

public void setUserRoles(Set<User> userRoles) {
    this.userRoles = userRoles;
}
}

Saving in controller: 保存在控制器中:

@RequestMapping(value = "/users/add", method = RequestMethod.POST)
public String addUser(@ModelAttribute("user")User user) {
    user.setPassword(StatickHelpers.md5(user.getPassword()));
    user.setId(15); // if remove this line i'll recive user fild id null exception
    userDAO.addUser(user);
    return "redirect:/users/";
}

Saving in UserDAO 保存在UserDAO中

 @Transactional
public void addUser(User user)
{
    Session session = null;
    try {
        session = openSession();

        session.save(user);

    } catch (Exception e) {

    } finally {

    }
}

I have a select block on page where i can chose a user role as a string. 我在页面上有一个选择块,可以在其中选择用户角色作为字符串。
so when saving a user i've got 所以在保存用户时

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.validation.BindException: 

org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'user' on field 'role': rejected value [ROLE_EMPLOYER]; codes [typeMismatch.user.role,typeMismatch.role,typeMismatch.com.sprsec.model.Role,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.role,role]; arguments []; default message [role]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.sprsec.model.Role' for property 'role'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.sprsec.model.Role] for property 'role': no matching editors or conversion strategy found]
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)

So as I understand I should create a bean in configuration witch helps spring framework to map convertion from string to Role objects? 因此,据我了解,我应该在配置中创建一个bean,女巫可以帮助Spring框架将字符串转换转换为Role对象吗? Can someone help me to resolve this error? 有人可以帮助我解决此错误吗?

Try to add BindingResult bindingResult after @ModelAttribute("user")User user in addUser method. 尝试在addUser方法的@ModelAttribute("user")User user之后添加BindingResult bindingResult

so, your addUser method is going to be like : 因此,您的addUser方法将类似于:

public String addUser(@ModelAttribute("user")User user, BindingResult bindingResult) {
    user.setPassword(StatickHelpers.md5(user.getPassword()));
    user.setId(15); // if remove this line i'll recive user fild id null exception
    userDAO.addUser(user);
    return "redirect:/users/";
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM