2016-02-27 106 views
0

我正在学习春天4.2.4通过编写一些webapp代码。想法是通过控制器返回json文件。 我已经在几天前发布了我的问题,但仍然没有我能为我的案例得到正确的建议。我正在尝试通过stackoverfolow提供的所有建议,这些建议都不适用于我。这里是我的控制器: .....SpringMvc控制器返回JSON,显示错误:HTTP状态406

@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检索的propely显示在控制台中。 问题是转换为JSON并返回结果。我一直试图通过更改jackson 1.9.x jar到jackson-fasterxml-2.x并且它不起作用。所有其他可能的servlete配置也不适用于我。 当我添加jackson-fasterxml-databind ....它显示文件名“getmessages”的文件下载对话框。下载并保存...

我非常感谢您的帮助。

回答

0

最后,我已经解决了这个问题如下: 我改变了我的返回类型从地图到字符串,我将我MAP为String在身旁我控制器:

  1. 转换我的地图字符串:

    ObjectMapper mapper = new ObjectMapper(); 
        String jsonFromMap = mapper.writeValueAsString(data); 
    
  2. 我也改变了我的依赖关系:

    <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> 
    

  3. 内@RequestMapping变化

    produces=application/json 
    

    produces=text/html 
    

我认为这个问题是浏览器无法理解应用程序/ JSON和返回地图..... ....... 无论我怎么做我想做的甚至 - 尽管我不知道我是怎么做到的!

相关问题