java - spring mvc Controller 报错java.lang.IllegalStateException : No suitable resolver for argument [0]

标签 java hibernate spring-mvc

代码报错

java.lang.IllegalStateException: No suitable resolver for argument [0][type=org.jopenclass.form.Course]

它向 ajax 调用发送 JSON 响应。我使用 hibernate 来持久化对象。

    @RequestMapping(value = "/savecourse", method = RequestMethod.POST)
public @ResponseBody
Object saveLecturer(@Valid @ModelAttribute(value = "course") Course course,
        BindingResult result) {

    Map<String, Object> response = new HashMap<String, Object>();

    if (result.hasErrors()) {
        List<ObjectError> results = result.getAllErrors();
        for (ObjectError objectError : results) {
            System.out.println(objectError.getDefaultMessage());
        }
        response.put("message", "Could not add the Course to the system.");
    } else {
        try {
            course.setId(courseDao.saveCourse(course));//returns the id
            response.put("course", course);

        } catch (Exception e) {
            System.out.println(e);

        }
    }

    return response;
}

但是当我创建一个新对象并将参数复制到另一个对象时,它工作正常。第二种方法(当然不是一个好方法)效果很好。请求对象中的所有参数也都设置为 cse 对象。

    @RequestMapping(value = "/savecourse", method = RequestMethod.POST)
public @ResponseBody
Object saveLecturer(@Valid @ModelAttribute(value = "course") Course course,
        BindingResult result) {

    Map<String, Object> response = new HashMap<String, Object>();

    if (result.hasErrors()) {
        List<ObjectError> results = result.getAllErrors();
        for (ObjectError objectError : results) {
            System.out.println(objectError.getDefaultMessage());
        }
        response.put("message", "Could not add the Course to the system.");
    } else {
        try {
            course.setId(courseDao.saveCourse(course));//returns the id
            Course cse = new Course();
            cse.setId(course.getId());
            cse.setCourseName(course.getCourseName());
            cse.setFee(course.getFee());
            Lecturer lec = new Lecturer();
            lec.setId(course.getLecturer().getId());
            lec.setFirstName(course.getLecturer().getFirstName());
            lec.setLastName(course.getLecturer().getLastName());
            cse.setLecturer(lec);
            cse.setGrade(course.getGrade());
            response.put("course", cse);

        } catch (Exception e) {
            System.out.println(e);

        }
    }

    return response;
}

第一种方法有什么问题?

最佳答案

在第一种情况下,Jackson 无法反序列化您的响应。我建议将您的返回类型更改为 Map<String, ? extends object> 如果问题仍然存在,请告诉我们

关于java - spring mvc Controller 报错java.lang.IllegalStateException : No suitable resolver for argument [0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13329365/

相关文章:

java - 如何修复 getGCF 递归程序?

java - 我可以使用 @MockBean 在我的测试类的一种方法中模拟 bean 吗?

java - 使用Java bufferedreader从URL获取html

java - 我们应该在 hibernate 中创建域类时实现 Serialized 接口(interface)吗

java - JPA Hibernate 通过合并进行插入而不是更新

java - 如何仅替换捕获组中的字符?

java - Hibernate 查询不适用于将值作为绑定(bind)参数 (?) 但在放入查询时有效

java - spring mvc无法访问.html文件

java - Spring 3.2 表单错误长静态 URL

java - Spring Boot 不提供静态内容返回 404 not found