Spring和Jackson中的JSONObject替代品

use*_*127 5 spring json jackson

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

我习惯将地图封装在JSONObject中

http://json.org/java/

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

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

Sta*_*Man 5

杰克逊有com.fasterxml.jackson.core.JsonNode,和特定的亚型一样ObjectNode.这些形式是所谓的Tree Model,这是与杰克逊处理JSON的3种方式之一 - 其他一些库(如org.json)只提供这种方式.

所以你应该可以使用JsonNode; 使用org.json图书馆没什么意义; 它很慢,并且已经过时了.

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


Pau*_*lgo 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();
}
Run Code Online (Sandbox Code Playgroud)

使用这里的示例

否则,如果您将 jackson 添加到依赖项并设置带有响应注释的控制器方法,则@ResponseBody响应将自动映射到 JSON。在这里查看一个简单的例子。