REST调用标题列表

Aru*_*run 9 java rest client http-headers

我有以下用于调用rest调用的代码片段.我有大约8个标题要传递给这个休息电话.但问题是难以管理.如果以后标题列表增加,我需要更改evaluateChange方法签名以包含附加标题作为方法params.

@Path("/v1/restclienturi/")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public interface RestClient {

    @POST
    @Path("/samplecall/evaluate")
    Response evaluateChange(
            @HeaderParam("HEADER1") String header1,
            @HeaderParam("HEADER2") String header2,
            @HeaderParam("HEADER3") String header3,
            @HeaderParam("HEADER4") String header4,
            @HeaderParam("HEADER5") String header5,
            @HeaderParam("HEADER6") String header6,
            @HeaderParam("HEADER7") String header7,
            @HeaderParam("HEADER8") String header8,
            @Context HttpServletResponse response, Request request);
}
Run Code Online (Sandbox Code Playgroud)

请提供您的想法或代码段以适应这一点.

我尝试了以下代码片段,但它不起作用(其中headerMap包含其中的所有8个标头):

@Path("/v1/restclienturi/")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public interface RestClient {

    @POST
    @Path("/samplecall/evaluate")
    Response evaluateChange(
            @RequestHeader Map<String, String> headerMap,
            @Context HttpServletResponse response, Request request);
}
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 4

我找到了使用 javax.ws.rs.core.Form 的解决方案:

 @Path("/v1/restclienturi/")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public interface RestClient {

    @POST
    @Path("/samplecall/evaluate")
    Response evaluateChange(
            @Form MyHeader headers,
            @Context HttpServletResponse response, Request request);
}
Run Code Online (Sandbox Code Playgroud)

以下是 MyHeader,它是一个 pojo:

public class MyHeader{
@HeaderParam("HEADER1")
    private String header1;

    @HeaderParam("HEADER2")
    private String header2;
.....
// getters and setters present
}
Run Code Online (Sandbox Code Playgroud)

实例化 MyHeader 并设置值以将其传递到 REST 服务,例如:

MyHeader headers = new MyHeader();
headers.setHeader1("HEADER1_VALUE");
...
Run Code Online (Sandbox Code Playgroud)

并致电:evaluateChange(headers, null,request);

问题: 这种方法的一个非常大的问题是,每次添加新标头时,我们都需要更改代码来设置和获取值。如果解决方案类似于作为集合传递,那么在添加新标头时我们不会涉及代码更改。喜欢:

Map<String,String> headersMap = new HashMap();
headers.put("HEADER1","HEADER1_VALUE");
....
evaluateChange(headersMap,null,request);
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样的解决方案。但上面的代码没有工作。寻找建议。