集成测试spring restTemplate(POST - &gt;传递List <string>并接收List <object>)

时间:2018-06-03 18:33:22

标签: spring testing resttemplate

我想根据给定字符串列表测试接收对象列表的方法。 我原来的方法:

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

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

Query(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 :(得分:0)

HTTP 415表示:不支持的媒体类型客户端错误响应代码表示服务器拒绝接受请求,因为有效内容格式采用不受支持的格式(source)。

您需要提供有关所请求内容类型和预期响应格式的信息。

Spring默认为application-json的content-type标头。 所以你需要告诉你的服务器它应该使用json来对post请求中的Tag类进行de-serilze,或者在post请求中指定所需的类型。 例如 org.springframework.http.MediaType #APICECT_XML_VALUE或org.springframework.http.MediaType#APPLICATION_JSON

您的回复会有类似的问题。

您可以在此处找到有关如何更改restTemplate conntent类型的示例 POST request via RestTemplate in JSON

我建议阅读:
http://www.baeldung.com/spring-requestmapping
http://www.baeldung.com/rest-template

答案 1 :(得分:0)

我的错误是我没有实现fil来创建对象列表。 我应该使用:

Fil fil= new Fil();
fil.setCpes(Stream.of("cpe1").collect(Collectors.toList()));