2016-11-21 1 views
3

NB: avec Spring Boot + SpringFox 2.6.0 1.4.2Reste données printemps, SpringFox et JpaRepository trouveurs personnalisés

Salut, je vais avoir un problème avec les formes Swagger 2 sur ma documentation de l'API sur une @RepositoryRestResource. Le code ci-dessous fonctionne très bien (accès REST OK):

@RepositoryRestResource(collectionResourceRel = "people", path = "people") 
public interface PersonRepository extends JpaRepository<Person, Long> { 
    Person findByLastName(@Param("name") String name); 
} 

Et les liens HATEOAS sont bien aussi: appeler URL/api/personnes/recherche se termine avec ce (paramètre avis "name"):

{ 
    "_links": { 
    "findByLastName": { 
     "href": "http://localhost:8080/api/people/search/findByLastName{?name}", 
     "templated": true 
    }, 
    "self": { 
     "href": "http://localhost:8080/api/people/search" 
    } 
    } 
} 

l'API REST est ok: URL/api/personnes/Recherche/findByLastName name = foobar renvoie des données lorsqu'il est exécuté avec un navigateur

MAIS dans Swagger le type paramètre GET est interprété comme "corps" au lieu de "requête" et le La soumission de formulaire (curl ... -d 'foobar' ...) échoue en 404, en essayant de soumettre "nom" en tant que corps de requête. J'ai donc essayé de mettre Swagger explicitement, comme ceci:

@RepositoryRestResource(collectionResourceRel = "people", path = "people") 
public interface PersonRepository extends JpaRepository<Person, Long> { 
    @ApiOperation("Find somebody by it's last name") 
    @ApiImplicitParams({ 
     @ApiImplicitParam(name = "name", paramType = "query") 
    }) 
    Person findByLastName(@Param("name") @ApiParam(name = "name") String name); 
} 

sans succès, en dépit du fait que « nom » est bien conservé sous la forme que le nom du paramètre dans cet exemple :-(

body parameter type on GET query

est-ce que quelqu'un sait ce qui pourrait être fait pour rendre cette forme de Swagger pour travailler Thx pour votre aide

Répondre

1

voici:? @param configure Spring données REST, tandis que @RequestParam convient Swagger

@RepositoryRestResource(collectionResourceRel = "people", path = "people") 
public interface PersonRepository extends JpaRepository<Person, Long> { 

    // @Param Spring Data REST : Use @Param or compile with -parameters on JDK 8 
    // @RequestParam Swagger : paramType=query cf. $Api*Param 

    Person findByLastName(@Param("name") @RequestParam("name") String name); 

} 

Me heureux!