Skip to content

Commit c54f6e3

Browse files
Detect Spring REST controllers using @Component annotation (#488)
1 parent 5a2455a commit c54f6e3

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

typescript-generator-spring/src/main/java/cz/habarta/typescript/generator/spring/SpringApplicationParser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
import org.springframework.core.annotation.AnnotationUtils;
4040
import org.springframework.data.domain.Pageable;
4141
import org.springframework.http.ResponseEntity;
42+
import org.springframework.stereotype.Component;
4243
import org.springframework.web.bind.annotation.PathVariable;
4344
import org.springframework.web.bind.annotation.RequestBody;
4445
import org.springframework.web.bind.annotation.RequestMapping;
4546
import org.springframework.web.bind.annotation.RequestMethod;
4647
import org.springframework.web.bind.annotation.RequestParam;
47-
import org.springframework.web.bind.annotation.RestController;
4848
import org.springframework.web.bind.annotation.ValueConstants;
4949

5050
public class SpringApplicationParser extends RestApplicationParser {
@@ -113,9 +113,9 @@ public JaxrsApplicationParser.Result tryParse(SourceType<?> sourceType) {
113113
}
114114

115115
// controller
116-
final RestController controller = AnnotationUtils.findAnnotation(cls, RestController.class);
117-
if (controller != null) {
118-
TypeScriptGenerator.getLogger().verbose("Parsing Spring RestController: " + cls.getName());
116+
final Component component = AnnotationUtils.findAnnotation(cls, Component.class);
117+
if (component != null) {
118+
TypeScriptGenerator.getLogger().verbose("Parsing Spring component: " + cls.getName());
119119
final JaxrsApplicationParser.Result result = new JaxrsApplicationParser.Result();
120120
final RequestMapping requestMapping = AnnotatedElementUtils.findMergedAnnotation(cls, RequestMapping.class);
121121
final String path = requestMapping != null && requestMapping.path() != null && requestMapping.path().length != 0 ? requestMapping.path()[0] : null;
@@ -153,7 +153,7 @@ public List<Class<?>> findRestControllers() {
153153
throw new RuntimeException(e);
154154
}
155155
})
156-
.filter(instance -> AnnotationUtils.findAnnotation(instance, RestController.class) != null)
156+
.filter(instance -> AnnotationUtils.findAnnotation(instance, Component.class) != null)
157157
.collect(Collectors.toList());
158158
return classes;
159159
}

typescript-generator-spring/src/test/java/cz/habarta/typescript/generator/spring/SpringTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import cz.habarta.typescript.generator.TypeScriptFileType;
88
import cz.habarta.typescript.generator.TypeScriptGenerator;
99
import cz.habarta.typescript.generator.util.Utils;
10+
import java.lang.annotation.Retention;
11+
import java.lang.annotation.RetentionPolicy;
1012
import java.lang.reflect.Method;
1113
import java.util.Arrays;
1214
import java.util.Collection;
@@ -18,6 +20,7 @@
1820
import org.springframework.data.domain.Page;
1921
import org.springframework.data.domain.Pageable;
2022
import org.springframework.http.ResponseEntity;
23+
import org.springframework.stereotype.Component;
2124
import org.springframework.web.bind.annotation.GetMapping;
2225
import org.springframework.web.bind.annotation.PathVariable;
2326
import org.springframework.web.bind.annotation.PostMapping;
@@ -360,4 +363,28 @@ public ResponseEntity<List<String>> get () {
360363
return ResponseEntity.ok(Arrays.asList( "a" , "b" , "c" ));
361364
}
362365
}
366+
367+
@Test
368+
public void testCustomControllerAnnotaion() {
369+
final Settings settings = TestUtils.settings();
370+
settings.outputFileType = TypeScriptFileType.implementationFile;
371+
settings.generateSpringApplicationClient = true;
372+
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(CustomAnnotatedController.class));
373+
System.out.println(output);
374+
Assert.assertTrue(output.contains("getText(): RestResponse<string>"));
375+
}
376+
377+
@MyRestController
378+
public class CustomAnnotatedController {
379+
@GetMapping("/text")
380+
public String getText() {
381+
return "";
382+
}
383+
}
384+
385+
@Retention(RetentionPolicy.RUNTIME)
386+
@Component
387+
public @interface MyRestController {
388+
}
389+
363390
}

0 commit comments

Comments
 (0)