2016-05-25 6 views
1

In unserem Projekt haben wir eine Schnittstelle und eine implementierende Klasse In der Schnittstelle stellen wir alle Methodensignaturen bereit, die mit @RequestMapping Annotation versehen sind . Die Klasse, die diese Schnittstelle implementiert, wird mit @RestController- und @RequestMapping-Annotationen versehen und überschreibt alle Methoden in dieser Schnittstelle.Spring Boot erstellt das Restful WS nicht, wenn wir @RequestBody oder @RequestHeader als Methodenparameter angeben

Ausgabe: In jedem der Verfahren, Wenn i @RequestBody oder @RequestHeader als Parameter geben, Frühling Boot nicht einmal schafft die/v1/MyApi/Last-URL in der @RequestMapping in der Schnittstelle gegeben. Aber wenn ich nur leere Parameter gebe, wird die URL erstellt.

Weiter eingraben, ich fand auch heraus, dass, wenn ich die @RequestMapping Annotationen von den Interface-Methoden entfernen und in den Methoden in der Controller-Klasse zur Verfügung stellen, unabhängig davon, irgendetwas im Methodenparameter zu geben.

Ich möchte nur wissen, warum das @RequestMapping in der Schnittstelle nicht berücksichtigt wird, wenn wir @RequestBody oder @RequestHeader als Methodenparameter verwenden.

@Controller 
@RequestMapping("/v1/myapi/") 
public class MyControllerClass implements MyInterface{ 
@Override 
public ResponseObject method1(@RequestBody String request, @RequestHeader(name= HttpHeaders.AUTHORIZATION) String token){ 

} 

//Interface Class 
public interface MyInterface { 
     @RequestMapping(method = RequestMethod.POST,value="/load",produces = MediaType.APPLICATION_JSON_VALUE) 
ResponseObject method1(@RequestBody String request, @RequestHeader(name= HttpHeaders.AUTHORIZATION) String token) throws Exception; 
} 

Antwort

0

Die Anmerkungen müssen alle in entweder der implementierenden Klasse oder in der Controller-Schnittstelle (falls Sie eine haben), um korrekt zu funktionieren. Kopiert von der JavaDoc von @RequestMapping:

HINWEIS: Wenn der Controller-Schnittstellen (zB für AOP Proxying), stellen Sie sicher, konsequent setzen auf alle Ihre Mapping-Anmerkungen - wie @RequestMapping und @SessionAttributes - auf die Controller Schnittstelle anstatt auf die Implementierungsklasse.

+0

Danke für das Zeigen. Jetzt macht es Sinn und ich kann sehen, dass alle meine RequestMapping unabhängig von den darin enthaltenen Methodenparametern erstellt werden. –

Verwandte Themen