2017-04-13 95 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

沒有好友。你應得的。你花時間研究這一點。 :-) –