17
17
18
18
import static org .springframework .util .StringUtils .*;
19
19
20
- import lombok .RequiredArgsConstructor ;
21
- import lombok .experimental .Delegate ;
22
-
23
20
import java .lang .reflect .Method ;
24
21
import java .net .URI ;
25
22
import java .util .Map ;
26
23
27
24
import javax .servlet .http .HttpServletRequest ;
28
25
26
+ import lombok .RequiredArgsConstructor ;
27
+ import lombok .experimental .Delegate ;
28
+
29
+ import org .springframework .core .env .PropertyResolver ;
29
30
import org .springframework .hateoas .Link ;
30
31
import org .springframework .hateoas .TemplateVariables ;
31
32
import org .springframework .hateoas .core .AnnotationMappingDiscoverer ;
53
54
* @author Kevin Conaway
54
55
* @author Andrew Naydyonock
55
56
* @author Oliver Trosien
57
+ * @author Josh Ghiloni
58
+ * @author Greg Turnquist
56
59
*/
57
60
public class ControllerLinkBuilder extends LinkBuilderSupport <ControllerLinkBuilder > {
58
61
@@ -99,7 +102,11 @@ public class ControllerLinkBuilder extends LinkBuilderSupport<ControllerLinkBuil
99
102
* @return
100
103
*/
101
104
public static ControllerLinkBuilder linkTo (Class <?> controller ) {
102
- return linkTo (controller , new Object [0 ]);
105
+ return linkTo (null , controller );
106
+ }
107
+
108
+ public static ControllerLinkBuilder linkTo (PropertyResolver resolver , Class <?> controller ) {
109
+ return linkTo (resolver , controller , new Object [0 ]);
103
110
}
104
111
105
112
/**
@@ -112,11 +119,15 @@ public static ControllerLinkBuilder linkTo(Class<?> controller) {
112
119
* @return
113
120
*/
114
121
public static ControllerLinkBuilder linkTo (Class <?> controller , Object ... parameters ) {
122
+ return linkTo (null , controller , parameters );
123
+ }
124
+
125
+ public static ControllerLinkBuilder linkTo (PropertyResolver resolver , Class <?> controller , Object ... parameters ) {
115
126
116
127
Assert .notNull (controller , "Controller must not be null!" );
117
128
Assert .notNull (parameters , "Parameters must not be null!" );
118
129
119
- String mapping = DISCOVERER .getMapping (controller );
130
+ String mapping = DISCOVERER .getMapping (controller , resolver );
120
131
121
132
UriComponentsBuilder builder = UriComponentsBuilder .fromUriString (mapping == null ? "/" : mapping );
122
133
UriComponents uriComponents = HANDLER .expandAndEncode (builder , parameters );
@@ -134,11 +145,15 @@ public static ControllerLinkBuilder linkTo(Class<?> controller, Object... parame
134
145
* @return
135
146
*/
136
147
public static ControllerLinkBuilder linkTo (Class <?> controller , Map <String , ?> parameters ) {
148
+ return linkTo (null , controller , parameters );
149
+ }
150
+
151
+ public static ControllerLinkBuilder linkTo (PropertyResolver resolver , Class <?> controller , Map <String , ?> parameters ) {
137
152
138
153
Assert .notNull (controller , "Controller must not be null!" );
139
154
Assert .notNull (parameters , "Parameters must not be null!" );
140
155
141
- String mapping = DISCOVERER .getMapping (controller );
156
+ String mapping = DISCOVERER .getMapping (controller , resolver );
142
157
143
158
UriComponentsBuilder builder = UriComponentsBuilder .fromUriString (mapping == null ? "/" : mapping );
144
159
UriComponents uriComponents = HANDLER .expandAndEncode (builder , parameters );
@@ -150,18 +165,26 @@ public static ControllerLinkBuilder linkTo(Class<?> controller, Map<String, ?> p
150
165
* @see org.springframework.hateoas.MethodLinkBuilderFactory#linkTo(Method, Object...)
151
166
*/
152
167
public static ControllerLinkBuilder linkTo (Method method , Object ... parameters ) {
153
- return linkTo (method .getDeclaringClass (), method , parameters );
168
+ return linkTo ((PropertyResolver ) null , method , parameters );
169
+ }
170
+
171
+ public static ControllerLinkBuilder linkTo (PropertyResolver resolver , Method method , Object ... parameters ) {
172
+ return linkTo (resolver , method .getDeclaringClass (), method , parameters );
154
173
}
155
174
156
175
/*
157
176
* @see org.springframework.hateoas.MethodLinkBuilderFactory#linkTo(Class<?>, Method, Object...)
158
177
*/
159
178
public static ControllerLinkBuilder linkTo (Class <?> controller , Method method , Object ... parameters ) {
179
+ return linkTo (null , controller , method , parameters );
180
+ }
181
+
182
+ public static ControllerLinkBuilder linkTo (PropertyResolver resolver , Class <?> controller , Method method , Object ... parameters ) {
160
183
161
184
Assert .notNull (controller , "Controller type must not be null!" );
162
185
Assert .notNull (method , "Method must not be null!" );
163
186
164
- UriTemplate template = DISCOVERER .getMappingAsUriTemplate (controller , method );
187
+ UriTemplate template = DISCOVERER .getMappingAsUriTemplate (controller , method , resolver );
165
188
URI uri = template .expand (parameters );
166
189
167
190
return new ControllerLinkBuilder (getBuilder ()).slash (uri );
@@ -190,7 +213,11 @@ public static ControllerLinkBuilder linkTo(Class<?> controller, Method method, O
190
213
* @return
191
214
*/
192
215
public static ControllerLinkBuilder linkTo (Object invocationValue ) {
193
- return FACTORY .linkTo (invocationValue );
216
+ return linkTo (null , invocationValue );
217
+ }
218
+
219
+ public static ControllerLinkBuilder linkTo (PropertyResolver resolver , Object invocationValue ) {
220
+ return FACTORY .linkTo (resolver , invocationValue );
194
221
}
195
222
196
223
/**
@@ -301,9 +328,9 @@ private static class CachingAnnotationMappingDiscoverer implements MappingDiscov
301
328
private final @ Delegate AnnotationMappingDiscoverer delegate ;
302
329
private final Map <String , UriTemplate > templates = new ConcurrentReferenceHashMap <String , UriTemplate >();
303
330
304
- public UriTemplate getMappingAsUriTemplate (Class <?> type , Method method ) {
331
+ public UriTemplate getMappingAsUriTemplate (Class <?> type , Method method , PropertyResolver resolver ) {
305
332
306
- String mapping = delegate .getMapping (type , method );
333
+ String mapping = delegate .getMapping (type , method , resolver );
307
334
308
335
UriTemplate template = templates .get (mapping );
309
336
0 commit comments