我需要将地图传递回Web应用程序。
我习惯将地图封装在JSONObject
中但是因为我使用的是Spring和Jackson Haus。
有更简单的方法来维持pojo吗?我可以只注释MAP吗?
答案 0 :(得分:5)
杰克逊拥有com.fasterxml.jackson.core.JsonNode
,以及ObjectNode
等特定子类型。
这些形成了所谓的Tree Model
,这是与杰克逊处理JSON的3种方法之一 - 其他一些库(如org.json
)只提供这种方式。
所以你应该只能使用JsonNode
;使用org.json
库没有什么意义;它很慢,而且已经过时了。
或者你可以使用java.util.Map
,然后返回。杰克逊可以处理标准的List
,Map
和其他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以获取一个简单示例。