2017-02-16 57 views
0

我有一个简单的Jersey POST方法接受JSON。我正在使用SOAP UI进行测试,使用POST和媒体类型application/JSON。 在请求体我有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

如果你不想把它反序列化到Bean,那么你就可以接受这个职位身体地图密钥 - 的值对。例如:

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

如果您正在使用泽西1.x的,然后收到你的的Json因为你需要与javax.xml.bind.annotation.XmlRootElement声明POJO和其标注的对象:

@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作为您的servlet的<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

你需要一个bean

public class Email{ 
     private String email; 

    //getters&setters 
    } 

public Response testJaxRs(Email emailBean){ 

请注意,您需要添加的依赖来解码JSON。例如,杰克逊并添加此映射到球衣的servlet在web.xml>查看完整的例子在这里: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>