2017-04-13 109 views
0

我有一个REST端点,如下所示。查询参数未映射

@Path("/consumers") 
@Produces("application/x.com.abc.pqr.audit.v2+json") 
@Consumes("application/x.com.abc.pqr.audit.v2+json") 
public interface ConsumerEndpoint { 

    @GET 
    @Path("paged") 
    Page<Module> getConsumersOfDependencyByPage(@BeanParam ConsumerQueryParams params); 

} 

正如你可以在上面看到,我使用@BeanParam从前端侧传递的查询参数映射。

ConsumerQueryParams类如下所示。

public class ConsumerQueryParams implements Serializable{ 
    private static final long serialVersionUID = 6440255704974023223L; 

    @QueryParam("pageNum") @DefaultValue("1") private int pageNum; 
    @QueryParam("pageSize") @DefaultValue("25") private int pageSize; 
    @QueryParam("groupId") private String groupId; 
    @QueryParam("artifactId") private String artifactId; 
    @QueryParam("version") private String version; 
    @QueryParam("groupIdFilter") private String groupIdFilter; 
    @QueryParam("artifactIdFilter") private String artifactIdFilter; 
    @QueryParam("versionFilter") private String versionFilter; 

    public ConsumerQueryParams() { 
    } 

    private ConsumerQueryParams(Builder builder) { 
     this.pageNum = builder.pageNum; 
     this.pageSize = builder.pageSize; 
     this.groupId = builder.groupId; 
     this.artifactId = builder.artifactId; 
     this.version = builder.version; 
     this.groupIdFilter = builder.groupIdFilter; 
     this.artifactIdFilter = builder.artifactIdFilter; 
     this.versionFilter = builder.versionFilter; 
    } 

    public int getPageNum() { 
     return pageNum; 
    } 

    public int getPageSize() { 
     return pageSize; 
    } 

    public String getGroupId() { 
     return groupId; 
    } 

    public String getArtifactId() { 
     return artifactId; 
    } 

    public String getVersion() { 
     return version; 
    } 

    public String getGroupIdFilter() { 
     return groupIdFilter; 
    } 

    public String getArtifactIdFilter() { 
     return artifactIdFilter; 
    } 

    public String getVersionFilter() { 
     return versionFilter; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if(this == obj) 
      return true; 
     if(!(obj instanceof ConsumerQueryParams)) 
      return false; 
     ConsumerQueryParams other = (ConsumerQueryParams) obj; 
     return Objects.equals(pageNum, other.pageNum) && 
       Objects.equals(pageSize, other.pageSize) && 
       Objects.equals(groupId, other.groupId) && 
       Objects.equals(artifactId, other.artifactId) && 
       Objects.equals(version, other.version) && 
       Objects.equals(groupIdFilter, other.groupIdFilter) && 
       Objects.equals(artifactIdFilter, other.artifactIdFilter) && 
       Objects.equals(versionFilter, other.versionFilter); 
    } 

    @Override 
    public int hashCode() { 
     return Objects.hash(pageNum, pageSize, groupId, artifactId, version, groupIdFilter, artifactIdFilter, versionFilter); 
    } 

    public static class Builder { 
     private int pageNum; 
     private int pageSize; 
     private String groupId; 
     private String artifactId; 
     private String version; 
     private String groupIdFilter; 
     private String artifactIdFilter; 
     private String versionFilter; 

     public Builder(int pageNum, int pageSize, String groupId, String artifactId) { 
      Preconditions.checkArgument(pageNum > 0, "pageNum must be greater than 0."); 
      Preconditions.checkArgument(pageSize > 0, "pageSize must be greater than 0."); 
      Preconditions.checkNotNull(groupId, "groupId is null"); 
      Preconditions.checkNotNull(artifactId, "artifactId is null"); 

      this.pageNum = pageNum; 
      this.pageSize = pageSize; 
      this.groupId = groupId; 
      this.artifactId = artifactId; 
     } 

     public Builder setVersion(String version) { 
      this.version = version; 
      return this; 
     } 

     public Builder setGroupIdFilter(String groupIdFilter) { 
      this.groupIdFilter = groupIdFilter; 
      return this; 
     } 

     public Builder setArtifactIdFilter(String artifactIdFilter) { 
      this.artifactIdFilter = artifactIdFilter; 
      return this; 
     } 

     public Builder setVersionFilter(String versionFilter) { 
      this.versionFilter = versionFilter; 
      return this; 
     } 

     public ConsumerQueryParams build() { 
      return new ConsumerQueryParams(this); 
     } 
    } 
} 

您可以看到我正在使用Builder模式来设置变量。 我正在使用下面的URL来访问上面指定的端点。

http://localhost:8080/rest/api/consumers/paged?groupId=org.slf4j&artifactId=slf4j-api&groupIdFilter=sdlc 

一切工作正常。我能够成功获取Postman上的数据。 现在我有一个要求,我需要分别重命名groupIdFilter,artifactIdFilter,versionFilter查询参数ConsumerQueryParams类到consumerGroupIdFilter,consumerArtifactIdFilterconsumerVersionFilter
ConsumerQueryParams类改变变量名称后,它看起来像这样:

public class ConsumerQueryParams implements Serializable{ 
    private static final long serialVersionUID = 6440255704974023223L; 

    @QueryParam("pageNum") @DefaultValue("1") private int pageNum; 
    @QueryParam("pageSize") @DefaultValue("25") private int pageSize; 
    @QueryParam("groupId") private String groupId; 
    @QueryParam("artifactId") private String artifactId; 
    @QueryParam("version") private String version; 
    @QueryParam("groupIdFilter") private String consumerGroupIdFilter; 
    @QueryParam("artifactIdFilter") private String consumerArtifactIdFilter; 
    @QueryParam("versionFilter") private String consumerVersionFilter; 

    public ConsumerQueryParams() { 
    } 

    private ConsumerQueryParams(Builder builder) { 
     this.pageNum = builder.pageNum; 
     this.pageSize = builder.pageSize; 
     this.groupId = builder.groupId; 
     this.artifactId = builder.artifactId; 
     this.version = builder.version; 
     this.consumerGroupIdFilter = builder.consumerGroupIdFilter; 
     this.consumerArtifactIdFilter = builder.consumerArtifactIdFilter; 
     this.consumerVersionFilter = builder.consumerVersionFilter; 
    } 

    public int getPageNum() { 
     return pageNum; 
    } 

    public int getPageSize() { 
     return pageSize; 
    } 

    public String getGroupId() { 
     return groupId; 
    } 

    public String getArtifactId() { 
     return artifactId; 
    } 

    public String getVersion() { 
     return version; 
    } 

    public String getConsumerGroupIdFilter() { 
     return consumerGroupIdFilter; 
    } 

    public String getConsumerArtifactIdFilter() { 
     return consumerArtifactIdFilter; 
    } 

    public String getConsumerVersionFilter() { 
     return consumerVersionFilter; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if(this == obj) 
      return true; 
     if(!(obj instanceof ConsumerQueryParams)) 
      return false; 
     ConsumerQueryParams other = (ConsumerQueryParams) obj; 
     return Objects.equals(pageNum, other.pageNum) && 
       Objects.equals(pageSize, other.pageSize) && 
       Objects.equals(groupId, other.groupId) && 
       Objects.equals(artifactId, other.artifactId) && 
       Objects.equals(version, other.version) && 
       Objects.equals(consumerGroupIdFilter, other.consumerGroupIdFilter) && 
       Objects.equals(consumerArtifactIdFilter, other.consumerArtifactIdFilter) && 
       Objects.equals(consumerVersionFilter, other.consumerVersionFilter); 
    } 

    @Override 
    public int hashCode() { 
     return Objects.hash(pageNum, pageSize, groupId, artifactId, version, consumerGroupIdFilter, consumerArtifactIdFilter, consumerVersionFilter); 
    } 

    public static class Builder { 
     private int pageNum; 
     private int pageSize; 
     private String groupId; 
     private String artifactId; 
     private String version; 
     private String consumerGroupIdFilter; 
     private String consumerArtifactIdFilter; 
     private String consumerVersionFilter; 

     public Builder(int pageNum, int pageSize, String groupId, String artifactId) { 
      Preconditions.checkArgument(pageNum > 0, "pageNum must be greater than 0."); 
      Preconditions.checkArgument(pageSize > 0, "pageSize must be greater than 0."); 
      Preconditions.checkNotNull(groupId, "groupId is null"); 
      Preconditions.checkNotNull(artifactId, "artifactId is null"); 

      this.pageNum = pageNum; 
      this.pageSize = pageSize; 
      this.groupId = groupId; 
      this.artifactId = artifactId; 
     } 

     public Builder setVersion(String version) { 
      this.version = version; 
      return this; 
     } 

     public Builder setConsumerGroupIdFilter(String consumerGroupIdFilter) { 
      this.consumerGroupIdFilter = consumerGroupIdFilter; 
      return this; 
     } 

     public Builder setConsumerArtifactIdFilter(String consumerArtifactIdFilter) { 
      this.consumerArtifactIdFilter = consumerArtifactIdFilter; 
      return this; 
     } 

     public Builder setConsumerVersionFilter(String consumerVersionFilter) { 
      this.consumerVersionFilter = consumerVersionFilter; 
      return this; 
     } 

     public ConsumerQueryParams build() { 
      return new ConsumerQueryParams(this); 
     } 
    } 
} 

现在我想用URL访问相同的端点:

http://localhost:8080/rest/api/consumers/paged?groupId=org.slf4j&artifactId=slf4j-api&consumerGroupIdFilter=sdlc 

但是,这是行不通的。 URL中的consumerGroupIdFilter查询参数未被映射到对象的consumerGroupIdFilter变量,而groupIdartifactId被映射。
我不知道为什么会发生这种情况。据我所知,ConsumerQueryParams类具有正确的代码。我所做的只是更改变量名称并更新了Builder类中的获得者和设置者。
任何人都可以帮助我。

回答

1

的问题是,该URL的新名称和注释有旧

@QueryParam("groupIdFilter") 

consumerGroupIdFilter 
+0

我只是觉得自己的哥们。只是输入答案,你的答案弹出。无论如何,我仍然将你的答案标记为正确答案。 :-) –

+0

不需要,谢谢! – efekctive

+0

没有好友。你应得的。你花时间研究这一点。 :-) –