2016-07-15 2 views
0

Wir haben eine große Anwendung auf Spring 3 gebaut.Im Frühling 3 Web - ist es möglich, Metadaten als Dokumentation in die RequestMapping Annotation einzubetten?

Wir verwenden this example, um einen Bericht über alle Endpunkte der Anwendung zu erstellen.

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; 

@Controller 
public class EndpointDocController { 
private final RequestMappingHandlerMapping handlerMapping; 

@Autowired 
public EndpointDocController(RequestMappingHandlerMapping handlerMapping) { 
    this.handlerMapping = handlerMapping; 
} 

@RequestMapping(value="/endpointdoc", method=RequestMethod.GET) 
public void show(Model model) { 
    model.addAttribute("handlerMethods", this.handlerMapping.getHandlerMethods()); 
} 
} 

Es wäre sehr hilfreich, wenn dieser Bericht eine Dokumentation über den Endpunkt enthalten könnte.

Meine Frage ist: Im Frühling 3 Web - ist es möglich, Metadaten als Dokumentation in die RequestMapping Annotation einzubetten?

Antwort

0

Wenn Sie sich die javadoc ansehen, sehen Sie, dass keine zusätzlichen Felder für diese Anmerkung in die Dokumentation eingefügt werden müssen, also direkt, nein.

Sie könnten jedoch Ihre eigene Anmerkung (@DocumentedRequestMapping) erstellen, die von der @RequestMapping erbt, die ein Feld documentation enthält. Dann verwenden Sie das Handler-Mapping, um zur Methode zu gelangen, ihre Annotationen zu erhalten, ihr Feld zu bekommen, und das könnte Ihnen helfen. So etwas wie

Map<T,HandlerMethod> map = this.handlerMapping.getHandlerMethods(); 
HandlerMethod handlerMethod = map.get('some T'); 
Method annotatedMethod = handlerMethod.getMethod(); 
Annotation documentedRequestMappingAnnotation = AnnotationUtils.findAnnotation(annotatedMethod, DocumentedRequestMapping.class); 
Map<String, Object> annotationValues = Annotationutils.getAnnotationAttributes(documentedRequestMappingAnnotation); 
annotationValues.get("documentation"); 

Geist, das ist völlig ungetestet