0

在我的 ajax 响应中,我想返回一个 JSON 结果。

我正在使用 spring mvc,并且我的 pom.xml 中已经有 jackson。

现在在我的控制器的操作中,我有:

  @ResponseBody
    @RequestMapping(value = "/someAjaxResponse", method = RequestMethod.POST)
    public String someAjaxResponse(HttpServletRequest request, HttpServletResponse response) {

    }

你建议我使用什么内置的java数据结构/类型,然后我可以使用jackson将它转换为json?

我不想为每个响应类型创建一个新类,所以我正在为此寻找一个好的通用 java 类型。

建议?

对于转换为 json,哪种方法最好,因为我知道杰克逊有多种转换对象的方法,比如我相信你创建一个实例并在整个应用程序中重用的 ObjectMapper?那么这是否意味着我将其标记为最终版本?

4

1 回答 1

2

答案取决于您的用例。我的建议是您创建一个完全符合您需求的自定义值对象,将其返回,然后让 Jackson 为您处理序列化:

@ResponseBody
@RequestMapping(value = "/someAjaxResponse", method = RequestMethod.POST)
public CustomValueObject someAjaxResponse(HttpServletRequest request, HttpServletResponse response) {

}

您所要做的就是将<mvc:annotation-driven />or添加@EnableWebMvc到您的应用程序上下文中,将 Jackson 依赖项添加到您的类路径中,然后该对象将自动序列化为 JSON,因为您使用了@ResponseBody注释。

阅读MappingJacksonHttpMessageConverterSpring 参考手册中的更多信息:

请注意,返回的对象可能具有复杂的结构。想象一下,您想向客户端提供人员数据,然后您可以Person从控制器方法返回一个对象:

public class Person {
    public String getFirstName() {...}
    public int getAge() {...}
    List<String> getEmailAddresses() {...}
    Address getAddress() {...}
}

public class Address {
    public String getStreet() {...}
    public int getHouseNumber() {...}
    public String getCity() {...}
    public int getZIP() {...}
    public String getState() {...}
}

可以序列化为:

{
    "firstName": "John",
    "lastName": "Doe",
    "age": 42,
    "emailAddresses": [
        "john@doe.com",
        "john.doe@somewhere.com"
    ],
    "address": {
        "street": "First Avenue",
        "houseNumber": 123,
        "city": "Smallville",
        "ZIP": 12345,
        "state": "CA"
    }
}
于 2012-10-20T16:45:15.570 回答