2017-09-13 2 views
0

J'ai un contrôleur REST qui définit une interface qui prend un corps de requête facultatif.415 Type de support non pris en charge, lors de l'envoi d'un corps de requête facultatif avec la requête POST

@RestController 
@RequestMapping(ExampleRest.EXAMPLE_URI) 
public class ExampleRest { 
    public static final String EXAMPLE_URI = "/examples"; 

    @RequestMapping(value = "/search", method = POST) 
    public Page<ExampleDto> search(@RequestBody(required = false) Searchable searchable, Pageable pageable) { 
     return exampleService.findAll(searchable, pageable); 
    } 
} 

L'objet Searchable contient des informations pour créer un JPASpecification. C'est à peu près un dto. Je voudrais rendre cette recherche facultative. J'ai compris que @RequestBody(required = false) devrait faire l'affaire.

J'ai le test suivant, où je veux tester une requête sans aucun corps de requête.

@Test 
public void post_NoCriteria_Ok() { 
    RequestEntity requestEntity = new RequestEntity(HttpMethod.POST, URI.create(ExampleRest.EXAMPLE_URI + "/search")); 
    ResponseEntity <RestResponsePage<ExampleDto>> response = restTemplate.exchange(requestEntity, new ParameterizedTypeReference <RestResponsePage<ExampleDto>>() {}); 
    Assert.assertEquals(HttpStatus.OK, response.getStatusCode()); 
} 

Si je lance ce test, il continue à ne pas cette réponse du RestController:

< 415 non pris en charge Type de support, Page 1 sur 1 contenant UNKNOWN cas, {Content-Type = [ application/JSON; charset = UTF-8], Transfer-Encoding = [morcelées], date = [Mer, 13 septembre 2017 10:10:22 GMT]}>

L'exécution code ne même pas entrer search implémentation de la méthode à l'intérieur du RestController.

Dès que je fournis un vide Searchable pour le test, il traverse.

Est-ce que l'implémentation de @RequestBody(required = false) buggy, ou qu'est-ce que je fais mal ici?

Répondre

0

Vous devez définir Content-Type comme "application/json" dans votre demande lors de l'envoi du fichier @Test.