2016-02-22 91 views
0

我想使用spring 4.2.4版本获取JSON数据。这里是我的控制器的代码;HTTP状态406:Spring JSON请求

@RequestMapping(value="/getmessage",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()); 
    return data; 
} 

的问题是,我得到一个错误:HTTP状态406:“报头‘’由该请求所标识的资源仅能够与根据该请求不可接受特征产生响应的”接受

你平时的帮忙吗?

+1

难道你'你的要求Accept'头?你应该设置'Accept:application/json' –

+0

谢谢。我现在试过了,同样的错误正在发生。 –

+0

我把你的方法粘贴到了我的环境中,并且(稍加修改,因为我没有Principal,Message或usersService),它工作得很好。我在Spring 4.2.3上,但我无法想象这会有所作为。 – chrsalln

回答

0

该问题与杰克逊版本有关。 为了解决这个问题,只是删除了以下内容:

<dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>1.9.13</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-core-asl</artifactId> 
      <version>1.9.13</version> 
     </dependency> 
从您的POM文件

,改为如下:

<dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.6.3</version> 
     </dependency>