我是春天的新手,我的网络应用程序基于spring mvc和hibernate 我创建了一个没有自定义字段类型的简单用户类,并且在userService上将新用户插入Db时遇到此错误:
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";
}
}
答案 0 :(得分:0)
尝试从控制器中删除此行。 System.out.println(user.toString());
我认为在查看控制器类之后,它是转换完成的唯一行。
如果要打印对象,请覆盖&#34; user&#34;中的toString()方法。类。类似于下面的示例:之后您可以编写System.out.println(user);
并且您不必使用.toString()来打印对象。
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this,
ToStringStyle.SHORT_PREFIX_STYLE);
}