java - 使用 Jersey 聚合参数

标签 java jersey

我正在开发 Jersey 框架..对于API,我们正在发送这样的多格式数据

public Response get(@HeaderParam("usrId") int usrId, @HeaderParam("id") int id, @FormDataParam("workFile") InputStream workFileStream, @FormDataParam("workFile") FormDataContentDisposition workFileDetail, @FormDataParam("workNotes") String workNotes, @FormDataParam("conditionFile") InputStream conditionFileStream,
@FormDataParam("conditionFile") FormDataContentDisposition conditionFileDatails, @FormDataParam("conditionNotes") String conditionNotes, @FormDataParam("DesignConditionFile") InputStream designConditionStream, @FormDataParam("DesignConditionFile") FormDataContentDisposition fileDesignCondition, @FormDataParam("desgnConditionNotes") String desgnConditionNotes,
@FormDataParam("drawingFile") InputStream drawingFileStream, @FormDataParam("drawingFile") FormDataContentDisposition fileDrawing, @FormDataParam("desgnDrawingNotes") String desgnDrawingNotes, @FormDataParam("listMakesFile") InputStream listMakesStream, @FormDataParam("listMakesFile") FormDataContentDisposition fileListMakes, @FormDataParam("listMakesNotes") String listMakesNotes,
@FormDataParam("paymentTermsFile") InputStream paymentTermsStream, @FormDataParam("paymentTermsFile") FormDataContentDisposition filePaymentTerms, @FormDataParam("paymentTermsNotes") String paymentTermsNotes, @FormDataParam("bankGuaranteFile") InputStream bankGuaranteStream, @FormDataParam("bankGuaranteFile") FormDataContentDisposition fileBankGuarante,
@FormDataParam("bankGuarnteeNotes") String bankGuarnteeNotes, @FormDataParam("commPointPrjReq") Boolean commPointPrjReq, @FormDataParam("commPointPrjTimeline") String commPointPrjTimeline, @FormDataParam("prjClauseFile") InputStream prjClauseFileStream, @FormDataParam("prjClauseFile") FormDataContentDisposition filePrjClause, @FormDataParam("prjClause") String prjClauseNotes){

.....code

}

对于一个 API,我们发送了如此多的文件......而为了定义参数,它将消耗 5 个文件......

我们可以在单独的输入类(input.java)中定义这个格式数据并像这样在API中调用输入类

public Response get(@HeaderParam("usrId") int usrId, @HeaderParam("id") int id, Input input)
{

............code
}

我们可以像这样定义输入类

public class input
{

@FormDataParam("workFile") InputStream workFileStream, @FormDataParam("workFile") FormDataContentDisposition workFileDetail, @FormDataParam("workNotes") String workNotes, @FormDataParam("conditionFile") InputStream conditionFileStream,
@FormDataParam("conditionFile") FormDataContentDisposition conditionFileDatails, 
@FormDataParam("conditionNotes") String conditionNotes, @FormDataParam("DesignConditionFile") InputStream designConditionStream, @FormDataParam("DesignConditionFile") FormDataContentDisposition fileDesignCondition, 
@FormDataParam("desgnConditionNotes") String desgnConditionNotes,
@FormDataParam("drawingFile") InputStream drawingFileStream, @FormDataParam("drawingFile") FormDataContentDisposition fileDrawing, @FormDataParam("desgnDrawingNotes") String desgnDrawingNotes, @FormDataParam("listMakesFile") InputStream listMakesStream, @FormDataParam("listMakesFile") FormDataContentDisposition fileListMakes, @FormDataParam("listMakesNotes") String listMakesNotes,
@FormDataParam("paymentTermsFile") InputStream paymentTermsStream, @FormDataParam("paymentTermsFile") FormDataContentDisposition filePaymentTerms, 
@FormDataParam("paymentTermsNotes") String paymentTermsNotes, @FormDataParam("bankGuaranteFile") InputStream bankGuaranteStream, @FormDataParam("bankGuaranteFile") FormDataContentDisposition fileBankGuarante,
@FormDataParam("bankGuarnteeNotes") String bankGuarnteeNotes, @FormDataParam("commPointPrjReq") Boolean commPointPrjReq, @FormDataParam("commPointPrjTimeline") String commPointPrjTimeline, @FormDataParam("prjClauseFile") InputStream prjClauseFileStream, @FormDataParam("prjClauseFile") FormDataContentDisposition filePrjClause, @FormDataParam("prjClause") String prjClauseNotes

}

最佳答案

尝试使用BeanParam 。该注释可以用作“参数聚合器”,可以注入(inject)到资源类字段、属性或资源方法参数中。它可以按以下方式使用:

1。将参数包装到一个类中

创建一个 POJO 来聚合您的参数:

public class Input {

    @FormDataParam("workFile") 
    private InputStream workFileStream;

    @FormDataParam("workFile")
    private FormDataContentDisposition workFileDetail;

    @FormDataParam("workNotes") 
    private String workNotes;

    @FormDataParam("conditionFile") 
    private InputStream conditionFileStream;

    @FormDataParam("conditionFile") 
    private FormDataContentDisposition conditionFileDatails;

    @FormDataParam("conditionNotes")
    private String conditionNotes;

    @FormDataParam("DesignConditionFile")
    private InputStream designConditionStream;

    @FormDataParam("DesignConditionFile")
    private FormDataContentDisposition fileDesignCondition;

    @FormDataParam("desgnConditionNotes")
    private String desgnConditionNotes;

    @FormDataParam("drawingFile")
    private InputStream drawingFileStream;

    @FormDataParam("drawingFile")
    private FormDataContentDisposition fileDrawing;

    @FormDataParam("desgnDrawingNotes")
    private String desgnDrawingNotes;

    @FormDataParam("listMakesFile")
    private InputStream listMakesStream;

    @FormDataParam("listMakesFile")
    private FormDataContentDisposition fileListMakes;

    @FormDataParam("listMakesNotes")
    private String listMakesNotes;

    @FormDataParam("paymentTermsFile")
    private InputStream paymentTermsStream;

    @FormDataParam("paymentTermsFile")
    private FormDataContentDisposition filePaymentTerms;

    @FormDataParam("paymentTermsNotes")
    private String paymentTermsNotes;

    @FormDataParam("bankGuaranteFile")
    private InputStream bankGuaranteStream;

    @FormDataParam("bankGuaranteFile")
    private FormDataContentDisposition fileBankGuarante;

    @FormDataParam("bankGuarnteeNotes")
    private String bankGuarnteeNotes;

    @FormDataParam("commPointPrjReq")
    private Boolean commPointPrjReq;

    @FormDataParam("commPointPrjTimeline")
    private String commPointPrjTimeline;

    @FormDataParam("prjClauseFile")
    private InputStream prjClauseFileStream;

    @FormDataParam("prjClauseFile")
    private FormDataContentDisposition filePrjClause;

    @FormDataParam("prjClause")
    private String prjClauseNotes;

    // Default constructor, getters and setters ommited
}

2。更改资源方法以使用“参数聚合器”类

使用上面定义的 POJO 作为资源方法的参数:

@POST
public Response upload(@HeaderParam("usrId") int usrId,
                       @HeaderParam("id") int id,
                       @BeanParam Input input) {
    ...
}

关于java - 使用 Jersey 聚合参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36717458/

相关文章:

java - 从接口(interface)继承的spring注入(inject)bean

java - 模拟或构建 Jersey InboundJaxrsResponse

http-headers - jersey.api.client.WebResource-如何调试/记录请求 header

java - 使用android中的添加按钮动态地将editTexts添加到布局

java - 为什么我无法使用 wireshark 捕获我的 Java 应用程序发送的 UDP 数据包?

java - 遍历每个可能的 double 值

java - 处理 Java 字符串和日期

eclipse - java.lang.ClassNotFoundException : com. sun.jersey.spi.container.servlet.ServletContainer 异常

java - 使用 Jersey 对 Google Translate 进行 POST 调用会返回 HTTP 404

java - 使用 Jetty/Jersey/Guice 提供静态内容