java 使用@Form- RestEasy - JAX-Rs绑定到VO的参数

14ifxucb  于 2023-01-07  发布在  Java
关注(0)|答案(2)|浏览(135)

我有几个变量@PathParam,我想把它们放在一个Bean中,并把它们放在一个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 requestMap到我的VO中的HttpRequest示例变量。
怎么做呢?因为它没有@PathParam这样的属性名。

inkz8wg9

inkz8wg91#

您可以将@Context值注入到属性中,就像form、path和header参数一样。
资源方法示例:

@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']
yx2lnoni

yx2lnoni2#

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

相关问题