2017-04-21 1 views
0

j'ai application Spring Boot et le contrôleur suivantChangement de chemin de base de données Spring REST ne concerne pas les contrôleurs personnalisés

@Controller 
@RequestMapping("/orders/{id}") 
@ExposesResourceFor(Payment.class) 
@RequiredArgsConstructor 
public class PaymentController { 
    ... 
} 

Quand je change

spring.data.rest.base-path=/api 

puis contrôleur réagit aux demandes sans/api chemin de base

curl -i -X PUT -H "Content-Type:application/json" -d "{ \"number\": \"1234123412341234\" }" http://localhost:8080/orders/1/payment 

-à-dire non http://localhost:8080/api/orders/1/payment

Si je veux avoir le chemin de base/api, cela signifierait mettre à jour le mappage du contrôleur vers @RequestMapping("/api/orders/{id}") ce qui n'est pas souhaitable car je code la configuration en code.

Y at-il une solution à ce problème? Merci

+0

Cette propriété est pour les contrôleurs de repos Spring Data. Votre contrôleur est un contrôleur Spring MVC standard. Voir ici pour plus de discussion: http://stackoverflow.com/questions/32927937/how-to-set-base-url-for-rest-in-spring-boot –

Répondre

2

Pour que vos contrôleurs personnalisés conscients du chemin de base configuré, vous devez les annoter avec @RepositoryRestController au lieu de @Controller

1

Et une remarque:

NE PAS utiliser l'annotation @RequestMapping niveau de classe si vous utilisez l'annotation @RepositoryRestController.

Sinon, vos méthodes de contrôleur pourraient être mappées deux fois!

D'abord par RequestMappingHandlerMapping SANS basePath, puis par le RepositoryRestHandlerAdapter AVEC le basePath