Skip to content

Commit e2ed5ee

Browse files
committed
replaced dummy entities with actual entities and prevented code from generating duplicate params
1 parent cb27936 commit e2ed5ee

File tree

10 files changed

+162
-159
lines changed

10 files changed

+162
-159
lines changed

springdoc-openapi-data-rest/pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
<artifactId>hibernate-validator</artifactId>
2525
<scope>test</scope>
2626
</dependency>
27+
<dependency>
28+
<groupId>com.querydsl</groupId>
29+
<artifactId>querydsl-core</artifactId>
30+
<optional>true</optional>
31+
</dependency>
2732
<dependency>
2833
<groupId>org.springdoc</groupId>
2934
<artifactId>springdoc-openapi-webmvc-core</artifactId>
@@ -56,4 +61,4 @@
5661
<scope>test</scope>
5762
</dependency>
5863
</dependencies>
59-
</project>
64+
</project>

springdoc-openapi-data-rest/src/main/java/org/springdoc/core/SpringDocDataRestConfiguration.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
package org.springdoc.core;
2020

21-
import java.util.Optional;
22-
2321
import com.fasterxml.jackson.core.JsonGenerator;
2422
import com.fasterxml.jackson.databind.SerializerProvider;
2523
import io.swagger.v3.core.converter.AnnotatedType;
@@ -33,19 +31,20 @@
3331
import org.springdoc.core.converters.RepresentationModelLinksOASMixin;
3432
import org.springdoc.core.customisers.QuerydslPredicateOperationCustomizer;
3533
import org.springdoc.core.customizers.OpenApiCustomiser;
36-
3734
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
38-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3935
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
4036
import org.springframework.context.annotation.Bean;
4137
import org.springframework.context.annotation.Configuration;
38+
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
39+
import org.springframework.data.querydsl.binding.QuerydslBindingsFactory;
4240
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
4341
import org.springframework.hateoas.Link;
4442
import org.springframework.hateoas.Links;
4543
import org.springframework.hateoas.RepresentationModel;
4644

45+
import java.util.Optional;
46+
4747
import static org.springdoc.core.Constants.SPRINGDOC_ENABLED;
48-
import static org.springdoc.core.Constants.SPRINGDOC_QDSLPREDICATE_MODE;
4948
import static org.springdoc.core.SpringDocUtils.getConfig;
5049

5150
@Configuration
@@ -57,6 +56,17 @@ public class SpringDocDataRestConfiguration {
5756
.replaceWithClass(org.springframework.data.domain.PageRequest.class, Pageable.class);
5857
}
5958

59+
@Configuration
60+
@ConditionalOnClass(value = {QuerydslBindingsFactory.class})
61+
class QuerydslProvider {
62+
63+
@Bean
64+
public QuerydslPredicateOperationCustomizer queryDslQuerydslPredicateOperationCustomizer(Optional<QuerydslBindingsFactory> querydslBindingsFactory,
65+
LocalVariableTableParameterNameDiscoverer localVariableTableParameterNameDiscoverer) {
66+
return querydslBindingsFactory.isPresent() ? new QuerydslPredicateOperationCustomizer(querydslBindingsFactory.get(), localVariableTableParameterNameDiscoverer) : null;
67+
}
68+
}
69+
6070
@Configuration
6171
@ConditionalOnClass(RepositoryRestConfiguration.class)
6272
class HalProviderConfiguration {

springdoc-openapi-data-rest/src/main/java/org/springdoc/core/customisers/QuerydslPredicateOperationCustomizer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ public Operation customize(Operation operation, HandlerMethod handlerMethod) {
8888
fieldsToAdd.addAll(aliases);
8989
fieldsToAdd.addAll(whiteList);
9090
for (String fieldName : fieldsToAdd) {
91+
//dont generate parameters with duplicate names
92+
Parameter existingParamWithSameName = getParameterFromOperationByName(operationParameters, fieldName);
93+
if (existingParamWithSameName != null) {
94+
continue;
95+
}
9196
Type type = getFieldType(fieldName, pathSpecMap, predicate.root());
9297
io.swagger.v3.oas.models.parameters.Parameter newParameter = buildParam(type, fieldName);
9398

springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app100/ChildEntity.java

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package test.org.springdoc.api.app100;
2+
3+
import javax.persistence.*;
4+
5+
/**
6+
* @author gibah
7+
*/
8+
9+
@Entity
10+
public class Country {
11+
12+
@Id
13+
@GeneratedValue
14+
private Long id;
15+
16+
@Basic
17+
@Column(nullable = false)
18+
private String name;
19+
20+
@Basic
21+
private String shortName;
22+
23+
@Basic
24+
private String dialingCode;
25+
26+
@Basic
27+
@Column(unique = true, nullable = false)
28+
private String codeISO3166;
29+
30+
@Basic
31+
@Column(nullable = false)
32+
@Enumerated(EnumType.STRING)
33+
private SpringDocApp100Test.Status status;
34+
35+
public Long getId() {
36+
return id;
37+
}
38+
39+
public void setId(Long id) {
40+
this.id = id;
41+
}
42+
43+
public String getName() {
44+
return name;
45+
}
46+
47+
public void setName(String name) {
48+
this.name = name;
49+
}
50+
51+
public String getShortName() {
52+
return shortName;
53+
}
54+
55+
public void setShortName(String shortName) {
56+
this.shortName = shortName;
57+
}
58+
59+
public String getDialingCode() {
60+
return dialingCode;
61+
}
62+
63+
public void setDialingCode(String dialingCode) {
64+
this.dialingCode = dialingCode;
65+
}
66+
67+
public String getCodeISO3166() {
68+
return codeISO3166;
69+
}
70+
71+
public void setCodeISO3166(String codeISO3166) {
72+
this.codeISO3166 = codeISO3166;
73+
}
74+
75+
public SpringDocApp100Test.Status getStatus() {
76+
return status;
77+
}
78+
79+
public Country setStatus(SpringDocApp100Test.Status status) {
80+
this.status = status;
81+
return this;
82+
}
83+
}

springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app100/DummyEntity.java

Lines changed: 0 additions & 60 deletions
This file was deleted.

springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app100/QChildEntity.java

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package test.org.springdoc.api.app100;
2+
3+
import com.querydsl.core.types.Path;
4+
import com.querydsl.core.types.PathMetadata;
5+
import com.querydsl.core.types.dsl.EntityPathBase;
6+
import com.querydsl.core.types.dsl.EnumPath;
7+
import com.querydsl.core.types.dsl.NumberPath;
8+
import com.querydsl.core.types.dsl.StringPath;
9+
10+
import javax.annotation.Generated;
11+
12+
import static com.querydsl.core.types.PathMetadataFactory.forVariable;
13+
14+
15+
/**
16+
* QCountry is a Querydsl query type for Country
17+
*/
18+
@Generated("com.querydsl.codegen.EntitySerializer")
19+
public class QCountry extends EntityPathBase<Country> {
20+
21+
public static final QCountry country = new QCountry("country");
22+
private static final long serialVersionUID = -1184258693L;
23+
public final StringPath codeISO3166 = createString("codeISO3166");
24+
25+
public final StringPath dialingCode = createString("dialingCode");
26+
27+
public final NumberPath<Long> id = createNumber("id", Long.class);
28+
29+
public final StringPath name = createString("name");
30+
31+
public final StringPath shortName = createString("shortName");
32+
33+
public final EnumPath<SpringDocApp100Test.Status> status = createEnum("status", SpringDocApp100Test.Status.class);
34+
35+
public QCountry(String variable) {
36+
super(Country.class, forVariable(variable));
37+
}
38+
39+
public QCountry(Path<? extends Country> path) {
40+
super(path.getType(), path.getMetadata());
41+
}
42+
43+
public QCountry(PathMetadata metadata) {
44+
super(Country.class, metadata);
45+
}
46+
47+
}
48+

springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app100/QDummyEntity.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app100/SpringDocApp100Test.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,18 @@ public GreetingController greetingController() {
5656
public static class GreetingController {
5757

5858
@GetMapping("/test")
59-
public ResponseEntity<?> sayHello2(@QuerydslPredicate(bindings = DummyEntityPredicate.class, root = DummyEntity.class) Predicate predicate,
59+
public ResponseEntity<?> sayHello2(@QuerydslPredicate(bindings = CountryPredicate.class, root = Country.class) Predicate predicate,
6060
@RequestParam List<Status> statuses) {
6161
return ResponseEntity.ok().build();
6262
}
6363
}
6464

65-
public static class DummyEntityPredicate implements QuerydslBinderCustomizer<QDummyEntity> {
65+
public static class CountryPredicate implements QuerydslBinderCustomizer<QCountry> {
6666

6767
@Override
68-
public void customize(QuerydslBindings querydslBindings, QDummyEntity qDummyEntity) {
69-
querydslBindings.bind(qDummyEntity.code).as("notCode").first((path, value) -> path.containsIgnoreCase(value));
68+
public void customize(QuerydslBindings querydslBindings, QCountry qCountry) {
69+
querydslBindings.bind(qCountry.codeISO3166).as("code").first((path, value) -> path.containsIgnoreCase(value));
70+
querydslBindings.bind(qCountry.dialingCode).as("postCode").first((path, value) -> path.containsIgnoreCase(value));
7071
}
7172
}
7273
}

0 commit comments

Comments
 (0)