2017-04-13 4 views
0

Ich habe einen REST Endpunkt wie unten gezeigt.Abfrageparameter werden nicht zugeordnet

@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); 

} 

Wie Sie oben sehen können, ich bin mit @BeanParam die Abfrageparameter von der vorderen Stirnseite geführt abzubilden.

Die Klasse ConsumerQueryParams ist unten abgebildet.

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); 
     } 
    } 
} 

Sie können sehen, dass ich das Builder Muster bin mit den Variablen zu setzen. Ich verwende die folgende URL, um auf den oben angegebenen Endpunkt zuzugreifen.

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

Alles funktioniert gut. Ich bin in der Lage, die Daten auf Postman erfolgreich zu erhalten. Jetzt habe ich eine Anforderung, wo ich die groupIdFilter, artifactIdFilter, versionFilter Abfrageparameter in ConsumerQueryParams Klasse zu consumerGroupIdFilter, consumerArtifactIdFilter bzw. consumerVersionFilter umbenennen müssen.
Nachdem die Variablennamen in ConsumerQueryParams Klasse zu ändern, sieht es so wie:

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); 
     } 
    } 
} 

Jetzt versuche ich, den gleichen Endpunkt mit der URL zuzugreifen:

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

Aber das funktioniert nicht. Der Abfrageparameter consumerGroupIdFilter in der URL wird nicht der consumerGroupIdFilter-Variablen des Objekts ConsumerQueryParams zugeordnet, während groupId und artifactId zugeordnet werden.
Ich bin mir nicht sicher, warum das passiert. Soweit ich weiß, hat die ConsumerQueryParams Klasse den richtigen Code. Alles, was ich tat, war, die Variablennamen zu ändern und die Getter und Setter in der Klasse Builder aktualisiert.
Kann mir hier jemand helfen.

Antwort

1

Das Problem ist, dass die URL die neuen Namen hat und die Anmerkung hat die alten

@QueryParam("groupIdFilter") 

consumerGroupIdFilter 
+0

ich es einfach fand ich Kumpel. War nur die Antwort und Ihre Antwort tauchte auf. Wie auch immer, ich habe deine Antwort immer noch als die richtige markiert. :-) –

+0

Keine Notwendigkeit, danke! – efekctive

+0

Kein Freund. Du verdienst es. Du hast Zeit damit verbracht, darüber nachzudenken. :-) –

Verwandte Themen