gpt4 book ai didi

java - 我的 User bean 中的 Spring MVC NotReadablePropertyException

转载 作者:行者123 更新时间:2023-12-01 13:15:43 24 4
gpt4 key购买 nike

我是 Spring 的新手。由于项目的原因,我仍在努力学习它。我想知道这个问题的解决方案是什么。我的 bean 中有一个 NotReadablePropertyException,特别是 User bean 的 userName。

这是我的用户 Bean

package com.nutsaboutcandywebproject.model;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name = "users", catalog = "db_nutsaboutcandy")
public class User {

private int userId;
private String username;
private String firstname;
private String lastname;
private String password;
private String role;
private String address;

public User(){

}


public User(int userId, String username, String firstname,
String lastname, String password, String role, String address) {
super();
this.userId = userId;
this.username = username;
this.firstname = firstname;
this.lastname = lastname;
this.password = password;
this.role = role;
this.address = address;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "user_id", unique = true, nullable = false)
public Integer getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}

@Column(name = "username", nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

@Column(name = "firstname", nullable = false)
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}

@Column(name = "lastname", nullable = false)
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}

@Column(name = "password", nullable = false)
public String getPassword() {
return password;
}

public void setPassword(String password) {
if(password.length()>=6){
this.password = password;
}
else{
throw new IllegalArgumentException("Password length must be more than 6 characters");
}
}

@Column(name = "user_role", nullable = false)
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}

@Column(name = "address", nullable = false)
public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

}

这是我的 Controller

@RequestMapping(value = "/login",method = RequestMethod.POST)
public ModelAndView login(@ModelAttribute("user")User user, BindingResult bindingResult,
HttpServletRequest request, HttpServletResponse response,
@RequestParam("usernametxt") String username, @RequestParam("passwordtxt") String password)
{
try
{
// Using Spring ValidationUtils class to check for empty fields.
// This will add the error if any in the bindingResult object.
ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult,"userName","userName", "Username can not be empty.");
ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult,"password","password", "Password not be empty");

if (bindingResult.hasErrors())
{
//returning the errors on same page if any errors..
return new ModelAndView("/LoginPage", "user", user);
}
else
{
// If the user details is validated then redirecting the user to success page,
// else returning the error message on login page.
ServiceFacade facade = new ServiceFacadeImpl();
List<User> userList = facade.getAllUsers();
for(int index = 0; index < userList.size(); index++){
String uname = userList.get(index).getUsername();
String pword = userList.get(index).getPassword();
if(username.equals(uname) && password.equals(pword))
{
request.getSession().setAttribute("user", user);
//Creating a redirection view to success page. This will redirect to UsersController
RedirectView redirectView = new RedirectView("success.do", true);
return new ModelAndView(redirectView);
}
else
{
bindingResult.addError(new ObjectError("Invalid", "Invalid credentials. " +
"Username or Password is incorrect."));
//return new ModelAndView("login", "user", user);
}
}

}
} catch (Exception e) {
System.out.println("Exception in LoginController "+e.getMessage());
e.printStackTrace();
return new ModelAndView("/LoginPage", "user", user);
}
return null;
}

堆栈跟踪如下:

org.springframework.beans.NotReadablePropertyException: Invalid property 'userName' of bean class [com.nutsaboutcandywebproject.model.User]: Bean property 'userName' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:725)
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:716)
at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99)
at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:229)
at org.springframework.validation.ValidationUtils.rejectIfEmptyOrWhitespace(ValidationUtils.java:245)
at org.springframework.validation.ValidationUtils.rejectIfEmptyOrWhitespace(ValidationUtils.java:203)
at com.nutsaboutcandywebproject.controller.UserController.login(UserController.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

最佳答案

您似乎正在提交带有值的表单(或请求参数)

userName=...

Spring 使用 bean 命名约定来解析属性 setter 。您的修改器和访问器已命名

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

注意小写的n

更改其中之一,但它们需要匹配。

为了让上面的 setter 工作,请求参数的名称必须是用户名

关于java - 我的 User bean 中的 Spring MVC NotReadablePropertyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com