1

我有一些变量作为@PathParam. 我想把它们放在一个 Bean 中并接受所有这些。

public void show( @PathParam("personId"> String personId, 
                  @PathParam("addressId") String addressId 
                  @Context HttpRequest request) {
       // Code
}

现在我想把所有的参数放在一个带@Form参数的 Bean/VO 中。我的课:

class RData {
    private String personId;
    private String addressId;
    private InputStream requestBody;

    @PathParam("personId")
    public void setPersonId(String personId) {
         this.personId = personId;
    }

    @PathParam("addressId")
    public void setAddressId(String addressId) {
         this.addressId = addressId;
    }

    // NOW HERE I NEED TO BIND HttpRequest Context object  to request object in my VO.
    // That is @Context param in the original method.
}

我的方法将更改为:

public void show( @Form RData rData) {
       // Code
}

我上面的 VO 课程包含我需要做的事情。所以我需要映射@Context HttpRequest requestHttpRequest我的 VO 中的实例变量。怎么做?因为它没有像@PathParam.

4

2 回答 2

2

您可以将@Context值注入属性,就像表单、路径和标题参数一样。

示例资源方法:

@POST
@Path("/test/{personId}/{addressId}")
public void createUser(@Form MyForm form)
{
    System.out.println(form.toString());
}    

示例表单类:

public class MyForm {

    private String personId;
    private String addressId;
    private HttpRequest request;

    public MyForm() {

    }

    @PathParam("personId")
    public void setPersonId(String personId) {
         this.personId = personId;
    }

    @PathParam("addressId")
    public void setAddressId(String addressId) {
         this.addressId = addressId;
    }

    public HttpRequest getRequest() {
        return request;
    }

    @Context
    public void setRequest(HttpRequest request) {
        this.request = request;
    }

    @Override
    public String toString() {
        return String.format("MyForm: [personId: '%s', addressId: '%s', request: '%s']", 
                this.personId, this.addressId, this.request);
    }
}

网址:

http://localhost:7016/v1/test/1/1

输出:

MyForm: [personId: '1', addressId: '1', request: 'org.jboss.resteasy.plugins.server.servlet.HttpServletInputMessage@15d694da']
于 2013-07-03T19:57:40.377 回答
0

我想我会为那些使用纯 JAX-RS 而不是专门使用 RestEasy 的人添加一个答案。面对同样的问题,并且惊讶于 JAX-RS 没有开箱即用的支持 http 表单绑定到 Java 对象,我创建了一个 Java API 来将 Java 对象编组/解组到表单,然后用它来创建JAX-RS 消息体读取器和写入器。

https://github.com/exabrial/form-b​​inding

于 2019-11-26T03:12:23.870 回答