gpt4 book ai didi

java - Spring MVC 中的错误 : java. lang.NoSuchMethodException : java. lang.Long.()

转载 作者:行者123 更新时间:2023-12-02 22:28:09 31 4
gpt4 key购买 nike

我在从数据库读取学生对象时收到此错误。

org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Long]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.lang.Long.<init>()
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:107)

完整堆栈跟踪:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Long]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.lang.Long.<init>()
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Long]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.lang.Long.<init>()
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:107)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:775)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:368)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:172)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.NoSuchMethodException: java.lang.Long.<init>()
java.lang.Class.getConstructor0(Class.java:3082)
java.lang.Class.getDeclaredConstructor(Class.java:2178)
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:775)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:368)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:172)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

文件Student.java

@Entity
@Table(name="Student")
public class Student implements Serializable{
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="studentId")
Long studentId;

@Column(name="studentName")
String studentName;

文件Controller.java

    @RequestMapping(value = "/read.html")
public String readStudent(Model model, @ModelAttribute("studentId") Long studentId) {
Student student = null;
studentId = 2l;
try{
student = serviceFile.readStudent(studentId);
}catch(Exception e){
model.addAttribute("message", "Some thing went wrong !!!! Exception occoured");
return "message";
}
model.addAttribute("student", student);
return "read";
}

文件daoImpl.java

@Repository
@Transactional
public class DaoImplFile implements DaoFile {

private EntityManager entityManager;

public EntityManager getEntityManager() {
return entityManager;
}

@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

@Override
public Student read(Long studentId) throws NullPointerException {
Student student = entityManager.find(Student.class, studentId);
if (student!=null) {
return student;
} else {
return null;
}
}

最佳答案

@ModelAttribute("studentId") Long StudentId 是问题的根源,因为 Spring 没有找到可以提供这个 Long 对象的方法,所以它尝试实例化一个并将其作为方法参数传递。 要解决此问题,您可以:

  • 从方法参数中删除@ModelAttribue

     @RequestMapping(value = "/read.html")
    public String readStudent(Model model,Long studentId) {
    Student student = null;
    studentId = 2l;
    try {
    student = serviceFile.readStudent(studentId);
    } catch(Exception e){
    model.addAttribute("message", "Some thing went wrong !!!! Exception occured");
    return "message";
    }
    model.addAttribute("student", student);
    return "read";
    }
  • 创建一个提供该Long对象的方法在你的 Controller 中

     @ModelAttribute
    public void provideStudentId(Model model){
    model.addAttribute("studentId", new Long(1));
    }
<小时/>

官方文档

@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@ModelAttribute Pet pet) { }

Given the above example where can the Pet instance come from? There are several options:

  1. It may already be in the model due to use of @SessionAttributes — seethe section called “Using @SessionAttributes to store model attributesin the HTTP session between requests”.
  2. It may already be in the model due to an @ModelAttribute method in the same controller — as explained in the previous section.
  3. It may be retrieved based on a URI template variable and type converter (explained in more detail below).
  4. It may be instantiated using its default constructor.

如果studentId是UI发送的参数名,可以这样使用@RequestParam

@RequestMapping(value = "/read.html")
public String readStudent(Model model, @RequestParam("studentId") Long studentId) {
Student student = null;
studentId = 2l;
try {
student = serviceFile.readStudent(studentId);
} catch(Exception e) {
model.addAttribute("message", "Some thing went wrong !!!! Exception occoured");
return "message";
}
model.addAttribute("student", student);
return "read";
}

关于java - Spring MVC 中的错误 : java. lang.NoSuchMethodException : java. lang.Long.<init>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35807064/

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