2013-07-31 7 views
5

クライアント/ブラウザがJSONリクエストを残りのリソースに対して行います(リクエストのコンテンツタイプはapplication/jsonで、対応するRESTメソッドは@Consumes("application/json")です)。JAX-RSのJSONリクエストからシンプルなJSONパラメータを取得

@Path("/process-something") 
@POST 
@Produces("application/json") 
@Consumes("application/json") 
@HandleDefaultExceptions 
public AResponse processSomething(List<Long>) { 

} 

JSON本体はList<Long>またはStringのようないくつかの単純な型で構成されています。

application/x-www-form-urlencodedリクエストの場合は、@FormParamと同様に、JSONパラメータに何らかの注釈を挿入するだけの簡単な可能性はありますか? 私はジャクソンのObjectMapperや投棄のJSONObjectでJSON文字列をデコードするよりも他のいくつかの容易なソリューションをしたいと思います。

+0

?、JSONのサポートを提供してそこに多くのフレームワークがありますのみ注釈が十分ではないですが、あなたは適切なプロバイダーをマッピングする必要がありますが、大したことはないthatsの。 Refer Jersey、Apache CXF – Sikorski

+0

ジャージーは私が使っているものです。私はあなたがObjectMapperのまたはオブジェクトのいくつかの他のインスタンス(質問の最後の部分を参照)... –

+1

私はあなたがいずれかのweb.xmlのエントリまたはいくつかの他の設定ファイルを提供しなければならないという意味ではありませんを作成するわけではないマッピングにより願っていますジャージーにJsonのサポートを使用するよう指示します。これを参照してください:https://jersey.java.net/documentation/latest/media.html#json - これは簡単なソリューションです! – Sikorski

答えて

4

あなたはJSONオブジェクトのデータモデルを反映したJavaクラスを作成し、JAXBの@XmlRootElementでそれに注釈を付けることがあります。あなたは:、@XmlElement注釈で例えばカスタムJSONキー名に属性をマップすることができ

@XmlRootElement 
public class MyJSONOject{ 
    @XmlElement(name="json-key-name") 
    public String attribute; 
} 

その後ジャージーを透過して出来上がりあなたのためのJSONオブジェクトをデコードすることができます!あなたはjaxrsの実装に使用しているフレームワーク

@Path("/process-something") 
@POST 
@Produces("application/json") 
@Consumes("application/json") 
public AResponse processSomething(MyJSONOject json) { 
    log.fine(json.attribute); 
} 
+1

パラメータを注釈(注釈)を挿入するなどの簡単な方法を期待していましたが、私はこれを答えとしてマークしました。これはジャクソンで手動で解読するよりも優れたソリューションです。 –

1

this documentationによれば、要求からのパラメータを抽出するために使用される6パラメータベースの注釈があり、そして誰もJSONパラメータについてと思いません。

+0

これはなぜ答えとして書かれましたか? – Sikorski

+1

これは答えかもしれません...少なくともJSONパラメータを抽出するJAX-RS標準のアノテーションはありません。 –

+0

@Consumes( "application/json")はどうしていますか? – Sikorski

関連する問題