我正在通过编写一些webapp代码来学习spring 4.2.4。想法是通过控制器返回json文件。 我已经在几天前发布了我的问题,但仍然没有我能为我的案例得到正确的建议。我正在尝试stackoverfolow给出的所有建议,这些建议都不适用于我。这是我的控制器: .....
@RequestMapping(value="/getmessages",method=RequestMethod.GET, produces="application/json")
@ResponseBody
public Map<String,Object> getMessage(Principal prinicipal){
List<Message>message=null;
if(prinicipal==null){
message=new ArrayList<Message>();
}
else{
String username=prinicipal.getName();
message=usersService.getMessage(username);
}
Map<String,Object> data= new HashMap<String,Object>();
data.put("message", message);
data.put("number", message.size());
System.out.println("message has to be her\n"+message);
System.out.println("Number message has to be her is..."+message.size());
return data;
}
要从mysql中检索的消息内容在控制台中显示。 问题是转换为JSON并返回结果。我一直试图通过将jackson 1.9.x jar更改为jackson-fasterxml-2.x并且它不起作用。 servlete的所有其他可能配置对我来说也不起作用。 当我添加jackson-fasterxml-databind ....它会显示文件名&#34; getmessages&#34;的文件下载对话框。下载并保存......
我非常感谢你的帮助。
答案 0 :(得分:0)
最后我解决了这个问题如下: 我将返回类型从MAP更改为String,并将我的MAP转换为我的CONTROLLER旁边的String:
将我的地图转换为字符串:
ObjectMapper mapper = new ObjectMapper();
String jsonFromMap = mapper.writeValueAsString(data);
我还将依赖项更改为:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.3</version>
内部@RequestMapping更改
produces=application/json
到
produces=text/html
我认为问题是浏览器无法理解application / json并返回Map ............ 我怎么做我想做的事 - 虽然我不知道我是怎么做到的!