Spring和Jackson中的JSONObject替代品

时间:2013-09-24 02:27:20

标签: json spring jackson

我需要将地图传递回Web应用程序。

我习惯将地图封装在JSONObject

http://json.org/java/

但是因为我使用的是Spring和Jackson Haus。

有更简单的方法来维持pojo吗?我可以只注释MAP吗?

2 个答案:

答案 0 :(得分:5)

杰克逊拥有com.fasterxml.jackson.core.JsonNode,以及ObjectNode等特定子类型。 这些形成了所谓的Tree Model,这是与杰克逊处理JSON的3种方法之一 - 其他一些库(如org.json)只提供这种方式。

所以你应该只能使用JsonNode;使用org.json库没有什么意义;它很慢,而且已经过时了。

或者你可以使用java.util.Map,然后返回。杰克逊可以处理标准的ListMap和其他JDK类型。

答案 1 :(得分:2)

如果你需要操作输出,即你不想提供对象的所有字段,你可以使用JSonArray:

@RequestMapping(value = "/api/users", method = RequestMethod.GET)
public
@ResponseBody
String listUsersJson(ModelMap model) throws JSONException {
    JSONArray userArray = new JSONArray();
    for (User user : userRepository.findAll()) {
        JSONObject userJSON = new JSONObject();
        userJSON.put("id", user.getId());
        userJSON.put("firstName", user.getFirstName());
        userJSON.put("lastName", user.getLastName());
        userJSON.put("email", user.getEmail());
        userArray.put(userJSON);
    }
    return userArray.toString();
}

使用here

中的示例

否则,如果将jackson添加到依赖项并将控制器方法设置为@ResponseBody,则响应将自动映射到JSON。请查看here以获取一个简单示例。