2.7.11.3. 将多部分表单映射到 POJO
如果您对多部分/格式数据数据包有精确的了解,您可以将它们映射到 POJO 类或从 POJO 类中进行映射。这通过 org.jboss.resteasy.annotations.providers.multipart.MultipartForm 注释(@MultipartForm)和 JAX-RS @FormParam 注释来实现。为此,您需要使用至少一个默认构造器定义 POJO,并使用 @FormParams 给其字段和/或属性标注。如果要创建输出,还必须使用 s。
org.jboss.resteasy.annotations.providers.multipart.PartType( @PartType)标记这些 @FormParam
示例:将多组件表单映射到 POJO
public class CustomerProblemForm {
@FormParam("customer")
@PartType("application/xml")
private Customer customer;
@FormParam("problem")
@PartType("text/plain")
private String problem;
public Customer getCustomer() { return customer; }
public void setCustomer(Customer cust) { this.customer = cust; }
public String getProblem() { return problem; }
public void setProblem(String problem) { this.problem = problem; }
}
在定义了 POJO 类后,您可以使用它来表示 多部分/格式数据。
示例:提交 CustomerProblemForm
@Path("portal")
public interface CustomerPortal {
@Path("issues/{id}")
@Consumes("multipart/form-data")
@PUT
public void putProblem(@MultipartForm CustomerProblemForm,
@PathParam("id") int id);
}
// Somewhere using it:
{
CustomerPortal portal = ProxyFactory.create(CustomerPortal.class, "http://example.com");
CustomerProblemForm form = new CustomerProblemForm();
form.setCustomer(...);
form.setProblem(...);
portal.putProblem(form, 333);
}
@MultipartForm 注释告知 RESTEasy 对象具有 @FormParam,并且应当从中托管。您还可以使用相同的对象来接收多部分数据。
示例:接收 客户ProblemForm
@Path("portal")
public class CustomerPortalServer {
@Path("issues/{id})
@Consumes("multipart/form-data")
@PUT
public void putIssue(@MultipartForm CustomerProblemForm,
@PathParam("id") int id) {
... write to database...
}
}