SpringMvc控制器返回JSON,显示错误:HTTP状态406

时间:2016-02-27 16:47:44

标签: json spring model-view-controller controller

我正在通过编写一些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;的文件下载对话框。下载并保存......

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题如下: 我将返回类型从MAP更改为String,并将我的MAP转换为我的CONTROLLER旁边的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
    
  4. 我认为问题是浏览器无法理解application / json并返回Map ............ 我怎么做我想做的事 - 虽然我不知道我是怎么做到的!