2011-11-15 147 views
1

我只是想加入這個我樣品控制器:Spring MVC的REST/JSON服務

@RequestMapping(value="/jsontest", method=RequestMethod.GET) 
    public @ResponseBody User getUserAsJson() { 

     User jsonUser = new User(); 
     jsonUser.setFirstName("Mickey"); 
     jsonUser.setLastName("Mouse"); 
     jsonUser.setUsername("mmous"); 


     return jsonUser; 
    } 

然而,逛/ jsontest網址上的406 HTTP錯誤=>不能接受的結束。

所以...什麼是用於生產「應用/ JSON」響應,而不是返回JSP/HTML視圖當前工作的方法是什麼?

我使用Spring框架3.0.6發佈。

+0

你的CLASSPATH你有['jackson.jar'(http://jackson.codehaus.org/)和你打'/ jsontest '接受:application/json'? –

+0

不,並且......不! –

+0

1)如何將jackson.jar添加爲Maven依賴項? –

回答

2

添加Jackson映射到CLASSPATH:

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.2</version> 
</dependency> 

並調用Web服務以正確接受頭,例如:

$ curl -H "Accept: application/json" localhost:8080/app/jsontest 
從瀏覽器

或者用$.getJSON()

+0

謝謝托馬斯,我理解,但...爲什麼它挑JSON作爲deafult返回格式?我的意思是......寫在哪裏?我讀了一些關於httpmessageconverters的內容,但沒有明白。 :( –

+0

沒有進入細節,這個邏輯在一個不起眼['writeWithMessageConverters'](http://grepcode.com/file/repository.springsource.com/org.springframework/org.springframework.web.servlet/3.0編碼.6/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java#AnnotationMethodHandlerAdapter.ServletHandlerMethodInvoker.writeWithMessageConverters(java.lang.Object%2Corg.springframework.http.HttpInputMessage%2Corg.springframework.http.HttpOutputMessage))。Put一個斷點,看看它是如何工作的。 –

+0

太好了!所以,我可以斷言「返回@ResponseBody一個String將返回text/plain的@ResponseBody和返回bean將返回應用程序/ JSON」? –

0
@RequestMapping(value="/jsontest", method=RequestMethod.GET,produces="application/json") 
    public @ResponseBody User getUserAsJson() { 

     User jsonUser = new User(); 
     jsonUser.setFirstName("Mickey"); 
     jsonUser.setLastName("Mouse"); 
     jsonUser.setUsername("mmous"); 


     return jsonUser; 
    } 

這應該工作的附加屬性產生..