2017-02-16 7 views
0

JSONを受け入れる単純なJersey POSTメソッドがあります。 POSTとメディアタイプapplication/JSONを使用して、SOAP UIを使用してテストしています。リクエストボディ内 私はJSONを持っている:私はこれをテストする場合JAX-RSでは、JSON文字列全体が投稿されています

{ 
    email:"test" 
} 

、私はテストとしてサービスに入って来ることを期待した文字列は、実際には全体のJSON文字列としてでてきます。ここに何が間違っているかわからない場合は、ドキュメントに従って動作するはずです。

@POST 
@Path("/TEST") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response testJaxRs(String email){ 
    // email = "{ 
    //  email:"test" 
    // }" 
    return Response.ok().build(); 
} 

答えて

2

値のペア。例:

public Response testJaxRs(Map<String, String> body) { 
    body.get("email") // "test" 
    ... 
+0

JAX RS標準またはジャージー機能ですか? – pedrofb

+0

@pedrofb公式の標準であるかどうかはわかりません。個人的には、WebSphere Liberty Profile(Apache Winkの実装を使用していると思う)上のJAX-RS 1.1でのみ使用しました。 – callmepills

1

あなたは、あなたがPOJOを宣言し、javax.xml.bind.annotation.XmlRootElementでそれに注釈を付ける必要があるオブジェクトとしてごJSONを受け取るために、ジャージー1.1を使用している場合:

@XmlRootElement 
public class EmailTest{ 

    String email; 

    public String getEmail(){ 
     return this.email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 
} 

次に、あなたのコントローラでこのクラスを使用する必要があります:

@POST 
@Path("/TEST") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response testJaxRs(Email email){ 
    System.out.println(email.getEmail()); // prints "test" 
    return Response.ok().build(); 
} 

最後にcom.sun.jersey.config.property.packagesをサーブレットの<init-param>として追加して、コントローラパッケージを指すパッケージ(,で区切られたもの)を追加します。あなたのweb.xml例えば:

<init-param> 
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <param-value>org.app.controllers</param-value> 
</init-param> 
1

あなたはJSONをデコードする依存関係を追加する必要が豆

public class Email{ 
     private String email; 

    //getters&setters 
    } 

public Response testJaxRs(Email emailBean){ 

注意が必要です。例えばジャクソンと>web.xmlにジャージーサーブレットにこのマッピングを追加し、ここで、完全な例を参照してください:あなたはBeanにそれをデシリアライズしたくない場合は、あなたがキー - のマップとしてポスト本体を受け入れることができhttps://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

<web-app ...> 

<servlet> 
    <servlet-name>jersey-servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <param-value>com.yourpackage</param-value> 
    </init-param> 
    <init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
関連する問題