如何在SpringMVC中为某个类自定义JSON

时间:2015-02-15 05:19:40

标签: java spring spring-mvc java-ee

我正在使用SpringMVC并使用以下方法。

@RequestMapping("/login")
public @ResponseBody User login(User user) {
    // some operation here ....
    return user;
}

在大多数情况下,SpringMVC以适当的方式将对象转换为JSON。但有时您可能需要自定义JSON。我在哪里可以为所有User对象自定义JSON。我希望将User对象转换为JSON的行为全面一致。我猜一个监听器或接口可以实现这一点。这种解决方案是否存在?

PS。如果我要转换的对象是第三方类的实例怎么办?我无法在类定义中自定义它,因为我没有源代码...

2 个答案:

答案 0 :(得分:1)

Spring默认使用Jackson来序列化和反序列化JSON。您可以在@JsonSerialize类型和提供商User实施中使用杰克逊的JsonSerializer注释,根据需要执行序列化。

答案 1 :(得分:0)

下面发布了一个将json Array反序列化为Arraylist的示例

@RequestMapping(value = "/mapJsonObjects", method = RequestMethod.POST)
public static ModelAndView parseJSONObjects(@RequestParam String jsonList,HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    JSONParser parser=new JSONParser();
    ArrayList filteredList = new ArrayList();
   Object obj = parser.parse(jsonList);
   JSONArray newList = (JSONArray)obj;
   filteredList = newList;
              -----------

}

将数组List转换为json数组。首先将以下bean添加到springServlet.xml

<bean name="jsonView"
    class="org.springframework.web.servlet.view.json.JsonView">
    <property name="contentType">
        <value>text/html</value>
    </property>
</bean>

然后从控制器返回arraylist,如下所示

                Map<String, Object> filteredMap = new LinkedHashMap<String, Object>();
                List<Accountdb> filteredList;
                ------filteredMap logic -----------
            filteredAccountMap.put("rows", filteredList);
            return new ModelAndView("jsonView", filteredMap);