тест пружины интеграции restTemplate (POST -> пройти список <String>и получить список <Object>) - PullRequest
0 голосов
/ 03 июня 2018

Я хочу протестировать метод получения списка объектов в соответствии со списком заданных строк.Мой оригинальный метод:

@RequestMapping(value = "/fil/", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public ResponseEntity<List<Tag>> findAllByCpe(@RequestBody Fil fil) {

    return ResponseEntity.ok(tagRepository.findAllBy(fil));
}

Запрос (tagRepository):

 @Query("SELECT t FROM Tag t WHERE (t.cpe IS NULL OR t.cpe IN (:#{#fil.cpes}))")
    List<Tag> findAllBy(@Param("fil") Fil fil);

Fil (Класс, содержащий список строк, по которым я хочу выполнить поиск)

@Getter
@Setter
@AllArgsConstructor
public class Fil {

    public Fil() {

    }

    @NotNull
    private List<String> cpes;

}

Я написал интеграционный тест:

@Test
public void FindTagGivenListOfCpes() {
    //GIVEN
    List<String> cpes = new ArrayList<>();
    cpes .add("C1");
    cpes .add("C2");
    cpes .add("C3");

    List<Tag> tagList = (List<Tag>) tagTestBuilder
        .saved()
        .itemList()
        .build();

    //WHEN
    ResponseEntity<Tag[]> response = restTemplate.postForEntity(TagsResourceConstants.PATH + "/fil/", cpes, Tag[].class);


    //THEN
    assertEquals(HttpStatus.OK.value(), response.getStatusCodeValue());
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Моя ошибка заключалась в том, что я не реализовал fil для создания списка объектов.Я должен использовать:

Fil fil= new Fil();
fil.setCpes(Stream.of("cpe1").collect(Collectors.toList()));
0 голосов
/ 03 июня 2018

HTTP 415 означает: код ответа об ошибке клиента Unsupported Media Type указывает, что сервер отказывается принять запрос, потому что формат полезной нагрузки находится в неподдерживаемом формате ( source ).

Вам необходимо предоставить информацию о запрошенном типе контента и ожидаемом формате ответа.

По умолчанию Spring использует заголовок типа контента для application / json.Поэтому вы должны сообщить своему серверу, что он должен использовать json для десериализации класса Tag по запросу после отправки, или указать требуемый тип в запросе после отправки.например, org.springframework.http.MediaType # APPLICATION_XML_VALUE или org.springframework.http.MediaType # APPLICATION_JSON

У вас будет похожая проблема в ответе.

Вы можете найти пример того, как изменитьrestTemplate conntent type здесь POST-запрос через RestTemplate в JSON

Я предлагаю прочитать:
http://www.baeldung.com/spring-requestmapping
http://www.baeldung.com/rest-template

...