【问题标题】:How to return a list of object as Json in Spring MVC如何在 Spring MVC 中以 Json 形式返回对象列表
【发布时间】:2012-09-26 14:49:16
【问题描述】:

我正在尝试获取要在 Spring 3 MVC 应用程序上呈现的对象列表,并希望通过 Ajax 来实现。

所以在我的春季课程中,我有:

@RequestMapping(value = "/viewSearchEnquiriesAjax", method = RequestMethod.GET, headers = "Accept=application/json")
public @ResponseBody List<Enquiry> getEnquiriesBySearchAjax(@RequestParam String name) {
    Search search =  new Search();
    search.setFirstName(name);
    return searchEnquiries(search);
}

但运行时我收到 500(内部服务器错误)。当我在浏览器中调试为'GET http://localhost:8080/SpringMVC/viewSearchEnquiriesAjax?name=peter 500 (Internal Server Error)'

我可以成功返回一个没有错误的对象。 Spring Json 映射器(Jackson)可以正确转换吗?我错过了一些基本的东西吗?

我的javascript如下:

function doAjaxPost() {
// get the form values
var firstName = $('#firstName').val();
$.getJSON("/SpringMVC/viewSearchEnquiriesAjax", { name: firstName }, function(result) {
    alert("Success");
 });

}

我的查询对象是一个实体:

@Entity
@Table(name = "enquiries")
public class Enquiry implements java.io.Serializable{

    private static final long serialVersionUID = -5093725544297637792L;

    protected Long id;
    protected Date created = new Date();
    ...
    ...

    public Enquiry() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }
   ...
   ...

【问题讨论】:

  • 你的Enquiry / Search 班级怎么样?
  • 我已经编辑了我的问题以包括我的 Inquiry 类,但截断了代码。 Search 类只是我可以进行搜索的包装器,可以重载搜索方法以接受字符串。
  • 请发布相关错误。
  • 错误发布到问题中,我在浏览器控制台中得到它。
  • 我的意思是在 java 方面,服务器日志中应该有一个堆栈跟踪

标签: ajax jquery spring-mvc


【解决方案1】:

对于 Jackson,由于类型擦除,您必须创建一个强类型列表类:

public class EnquiryList extends ArrayList<Enquiry> {
}

然后从您的控制器返回此列表:

@RequestMapping(value = "/viewSearchEnquiriesAjax", method = RequestMethod.GET, headers = "Accept=application/json")
public @ResponseBody EnquiryList getEnquiriesBySearchAjax(@RequestParam String name) {
    EnquiryList list = new EnquiryList();
    ...
    return list;
}

也可以查看this answer 的类似问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2021-09-23
    • 2013-05-23
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多