Har*_*nam 2 java rest jax-rs restlet resteasy
我在休息服务中看到了以下代码片段
@POST
@Consumes("application/xml")
@Path("/ProjectConfiguration/{onetimetoken}")
public void createProjectConfiguration(@PathParam("onetimetoken") String oneTimeToken,
CreateProjectConfigurationRequest request) throws IntegratedAppFault {
// NOOPS
}
Run Code Online (Sandbox Code Playgroud)
在这个变量值中,oneTimeToken由路径中的内容初始化.但我怀疑的是如何初始化CreateProjectConfigurationRequest类型的请求对象.我们如何自由地在这些方法中拥有任何参数.这是怎么回事?如何保证初始化.
上面的方法是期望在正文中带有XML消息的HTTP POST请求.你可以告诉,因为该方法用@POST和注释@Consumes("application/xml").Resteasy看到CreateProjectConfigurationRequest您的方法签名中有一个类型,该类型使用JAXB注释进行注释,并将HTTP请求的主体绑定到该对象.
您还可以使用@Context注释注入以下类的实例.
在符合JAX-RS的框架中内置了标准支持,用于将XML和Json请求体编组到方法参数中.如果您需要读取自定义消息格式,那么您将创建一个MessageBodyReader将传入的http请求主体并将其绑定到参数,就像XML或Json一样.
下面的代码说明了如何将请求主体绑定到方法参数中的java对象.
使用上面的示例,我们假设我们的服务公开了以下休息端点:
@POST
@Consumes("application/xml")
@Path("/ProjectConfiguration/{onetimetoken}")
public void createProjectConfiguration(@PathParam("onetimetoken") String oneTimeToken,
CreateProjectConfigurationRequest request) throws IntegratedAppFault
{
System.out.println(oneTimeToken);
System.out.println(request.toString());
}
Run Code Online (Sandbox Code Playgroud)
此端点期望接收包含XML表示的HTTP POST消息CreateProjectConfigurationRequest.
我们知道这是因为:
@POST表明它是由POST请求触发的.@Consumes(application/xml)指示它仅由具有HTTP Content-Type头的请求触发application/xml.CreateProjectConfigurationRequest不与注释@Form,@FormParam,@PathParam,@QueryParam,或@HeaderParam将指示它是从请求的一些其他部分的到来.现在,让我们假设它CreateProjectConfigurationRequest定义如下:
@XmlRootElement
public class CreateProjectConfigurationRequest
{
private int id;
private String name;
@XmlElement
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
@XmlElement
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我们发送一个HTTP POST请求http://somehost/someapp/ProjectConfiguration/123abc用Content-Type的application/xml和下面的XML体我们的方法将被调用.
<CreateProjectConfigurationRequest>
<id>123</id>
<name>test</name>
</CreateProjectConfigurationRequest>
Run Code Online (Sandbox Code Playgroud)
然后,Resteasy JAXB Provider将获取传入的XML并CreateProjectConfigurationRequest基于内省对象和我们在其上面添加的注释创建对象.
然后,您的方法将运行并打印oneTimeToken(使用@PathParam("onetimetoken")注释从路径中检索)并请求.
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |