2016-02-27 90 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和返回地圖..... ....... 無論我怎麼做我想做的甚至 - 儘管我不知道我是怎麼做到的!