转换请求元素失败,没有找到匹配的编辑器或转换策略



我是spring的新手,我的web应用程序是基于spring mvc和hibernate我创建了一个简单的用户类,没有自定义字段类型,在通过userService向数据库插入新用户时,我遇到了这个错误:

WARN : org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to convert request element: org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type [com.mihanblog.CloudGIS.Model.UserObj] to required type [java.lang.String]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.mihanblog.CloudGIS.Model.UserObj] to required type [java.lang.String]: no matching editors or conversion strategy found
用户类

@Entity
@Table(name="TableUser")
public class UserObj {
@javax.persistence.Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="UserID",unique=true,nullable=false)
private int Id;
@Column(name="UserName",nullable=false)
@Size(min=3, max=20,message="        {userNameWarining}")@NotNull(message="userNameNotInsertedWarining")
private String userName;
@Column(name="password",nullable=false)
@NotNull(message="passwordNotInsertedWarining")
private String password;
@Column(name="email")
@Email 
@Size(min=3,message="{emailWarinig}")@NotNull(message="emailWarinig")
private String emailAddress;
}

用户服务
@Transactional(propagation=Propagation.SUPPORTS,rollbackFor=Exception.class)
public class UserServiceImpl implements UserService {
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
    this.userDAO = userDAO;
}
@Override
public void updateUser(UserObj user) {
    userDAO.updateUser(user);
}
@Override
public UserObj getUserById(int userId) {
    return userDAO.getUserById(userId);
}
@Override
public UserObj getUserByUserName(String userName) {
    return userDAO.getUserByUserName(userName);
}
@Override
public void deleteUser(int userId) {
    userDAO.deleteUser(userId);
}
@Override
public List<UserObj> getUsers() {
    return userDAO.getUsers();
}
@Override
public void addUser(UserObj user) {
    userDAO.addUser(user);
}
}

这是appContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/cache      http://www.springframework.org/schema/cache/spring-cache-4.2.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.2.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<mvc:annotation-driven validator="validator"  />
<mvc:resources location="/resources/" mapping="/resources/**" />
<bean     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>
<context:component-scan base-package="com.mihanblog.CloudGIS" />
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="validator"    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource" ref="messageSource" />
</bean>

userDAO

public class UserDAOImpl implements UserDAO {
private SessionFactory sessionFactory;
@Override
public void updateUser(UserObj user) {
    Session session = this.sessionFactory.getCurrentSession();
    session.update(user);
}
@Override
public void deleteUser(int userId) {
    Session session = this.sessionFactory.getCurrentSession();
    session.beginTransaction();
    UserObj user = session.load(UserObj.class, new Integer(userId));
    if (null != user) {
        session.delete(user);
    }
    session.getTransaction().commit();
}
@Override
public List<UserObj> getUsers() {
    Session session = this.sessionFactory.getCurrentSession();
    session.beginTransaction();
    List<UserObj> users = (List<UserObj>) session.createQuery("From     UserObj").list();
    session.getTransaction().commit();
    return users;
}
@Override
public UserObj getUserById(int userId) {
    Session session = this.sessionFactory.getCurrentSession();
    session.beginTransaction();
    UserObj user = session.load(UserObj.class, new Integer(userId));
    return user;
}
@Override
public UserObj getUserByUserName(String userName) {
    Session session = this.sessionFactory.getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery("From UserObj WHERE    UserName=:userNameNP");
    query.setString("userNameNP", userName);
    if (!query.list().isEmpty()) {
        UserObj user = (UserObj) query.list().get(0);
        session.getTransaction().commit();
        return user;
    } else {
        return null;
    }
}
public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
@Override
public void addUser(UserObj user) {
    Session session = this.sessionFactory.getCurrentSession();
    session.beginTransaction();
    session.persist(user);
    session.getTransaction().commit();
}
}

UserLoginController

@Controller
@SessionAttributes("UserName")
public class UserLoginController {
@Autowired
private  UserService userService;
//redirect to Registration Page
@RequestMapping(value="/register",method = RequestMethod.GET)
private String ShowRegistrationPage(Model model){
    model.addAttribute("UserObj",new UserObj());
    return "register";
}
@RequestMapping(value={"/register"},method = RequestMethod.POST)
private ModelAndView name(@Validated  UserObj user, BindingResult result,final RedirectAttributes redirectAttributes) {
    System.out.println(user.toString());
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("UserObj",user);
    if (result.hasErrors()) {
        user.setPassword("");
        modelAndView.setViewName("register");
        List<FieldError> listFieldErrors=result.getFieldErrors();
        for (FieldError fieldError : listFieldErrors) {
            System.out.println(fieldError.getField()+"Error"+"n"+fieldError.getDefaultMessage());
            modelAndView.getModelMap().addAttribute(fieldError.getField()+"Error", fieldError.getDefaultMessage());
        }
    }
    else {
        userService.addUser(user);
        modelAndView.getModelMap().addAttribute("UserName", user.getUserName());
        modelAndView.setViewName("redirect:/map");
    }
    return modelAndView;
}
@RequestMapping(value={"login"} ,method=RequestMethod.GET)
private String ShowLoginForm(){
    return "login";
}
@RequestMapping(value={"login"} ,method=RequestMethod.POST)
private String LoginUser(){
    return "login";
}
@RequestMapping(value={"logout"} ,method=RequestMethod.GET)
private String LogoutUser(SessionStatus status){
    status.setComplete();
    return "home";
}

}

尝试从控制器中删除这一行。System.out.println(user.toString());我认为这是唯一的行转换完成后,看看你的控制器类。

如果你想打印你的对象,覆盖你的"user"类中的toString()方法。类似于下面的例子:之后你可以写System.out.println(user);,你不必使用。tostring()来打印对象。

@Override
public String toString() {
    return ReflectionToStringBuilder.toString(this,
            ToStringStyle.SHORT_PREFIX_STYLE);
}

最新更新