2011-11-15 8 views
1

私はちょうど私のサンプルコントローラにこれを追加してみました:Spring MVCの休息/ 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 URLにアクセスすると、=>は許容できない406 HTTPエラーで終了します。

だから、jsp/htmlビューを返す代わりに、 "application/json"レスポンスを生成するために現在動作しているメソッドは何ですか?

私はSpring Framework 3.0.6 RELEASEを使用しています。

+0

を作り出す動作するはずです、あなたのCLASSPATHに[ 'jackson.jar'](http://jackson.codehaus.org/)を持っていますか、あなたは'/jsontestを呼び出しています'Accept:application/json'を使用していますか? –

+0

いいえ、そして....いいえ! –

+0

1)jackson.jarをMavenのdepedencyとして追加するにはどうすればよいですか? –

答えて

2

は、あなたのCLASSPATHにJacksonマッパー追加:

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

を、正しい例えば、ヘッダを受け入れる:

$ curl -H "Accept: application/json" localhost:8080/app/jsontest 

またはブラウザから$.getJSON()を使用してWebサービスを呼び出します。

+0

トマシュ、ありがとう、私は理解しています...なぜそれがジーンズを嫌な人の返品形式として選ぶのですか?それはどこに書かれているの?私はhttpmessageconvertersについて何かを読んだが、理解しなかった。 :( –

+0

詳細には言及しないが、このロジックはあいまいな['writeWithMessageConverters'](http://grepcode.com/file/repository.springsource.com/org.springframework/org.springframework.web.servlet/3.0 。/ org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java#AnnotationMethodHandlerAdapter.ServletHandlerMethodInvoker.writeWithMessageConverters(java.lang.Object%2Corg.springframework.http.HttpInputMessage%2Corg.springframework.http.HttpOutputMessage))。 –

+0

nice! "@ResponseBodyがStringを返すとtext/plainが返され、@ResponseBodyがBeanを返すとapplication/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; 
    } 

これは、追加属性..

関連する問題