Java 使用RestTemplate测试Spring数据Rest端点在SpringBoot 2.0.0.BUILD-SNAPSHOT中不起作用
我使用SpringDataREST将SpringDataJPA存储库公开为REST端点Java 使用RestTemplate测试Spring数据Rest端点在SpringBoot 2.0.0.BUILD-SNAPSHOT中不起作用,java,spring-boot,spring-data-jpa,spring-data-rest,Java,Spring Boot,Spring Data Jpa,Spring Data Rest,我使用SpringDataREST将SpringDataJPA存储库公开为REST端点 @Entity @Table(name = "USERS") public class User implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; private String em
@Entity
@Table(name = "USERS")
public class User implements Serializable
{
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String email;
private String password;
}
public interface UserRepository extends JpaRepository<User, Integer>
{
}
@实体
@表(name=“USERS”)
公共类用户实现可序列化
{
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
私有整数id;
私有字符串名称;
私人字符串电子邮件;
私有字符串密码;
}
公共接口用户存储库扩展了JpaRepository
{
}
使用SpringBoot 1.5.3.RELEASE时,我可以使用RestTemplate测试端点,如下所示:
@Test
public void testGetUsers()
{
RestTemplate restTemplate = restTemplate();
ResponseEntity<PagedResources<User>> responseEntity =
restTemplate.exchange(
"http://localhost:8080/users",
HttpMethod.GET,
null,
new ParameterizedTypeReference<PagedResources<User>>()
{},
Collections.emptyMap()
);
PagedResources<User> userResource = responseEntity.getBody();
Collection<User> users = userResource.getContent();
assertNotNull(users);
}
protected RestTemplate restTemplate()
{
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.registerModule(new Jackson2HalModule());
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
converter.setObjectMapper(mapper);
return new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter));
}
@测试
public void testGetUsers()
{
RestTemplate RestTemplate=RestTemplate();
响应响应响应响应=
restTemplate.exchange(
"http://localhost:8080/users",
HttpMethod.GET,
无效的
新的ParameteredTypeReference()
{},
Collections.emptyMap()
);
PagedResources userResource=responseEntity.getBody();
集合用户=userResource.getContent();
assertNotNull(用户);
}
受保护的RestTemplate RestTemplate()
{
ObjectMapper mapper=新的ObjectMapper();
configure(在未知属性上反序列化feature.FAIL,false);
registerModule(新Jackson2HalModule());
MappingJackson2HttpMessageConverter=新的MappingJackson2HttpMessageConverter();
setSupportedMediaTypes(MediaType.parseMediaTypes(“application/hal+json”);
setObjectMapper(映射器);
返回新的RestTemplate(收集。我可以看到您正在自己创建ObjectMapper
,因此我不确定Spring Boot是如何参与其中的。我尝试了自动连接ObjectMapper,并将其与MappingJackson2HttpMessageConverter一起注册。但仍然不起作用。顺便说一句,即使我创建了ObjectMap实例,它在1.5.3中也可以正常工作per.@K.sivaprasadeddy:请调查一下这个问题。我想你在谈论同一个问题。
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [org.springframework.hateoas.PagedResources<com.myapp.entities.User>] and content type [application/hal+json;charset=UTF-8]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:117)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:946)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:930)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:684)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:650)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:598)
at com.myapp.demo.SpringbootDataRestDemoApplicationTest.testGetUsers(SpringbootDataRestDemoApplicationTest.java:53)
@RunWith(SpringRunner.class)
@SpringBootTest(classes=DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemoApplicationTests
{
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testGetUsers()
{
ResponseEntity<PagedResources<User>> responseEntity =
restTemplate.exchange("/users",
HttpMethod.GET,
null,
new ParameterizedTypeReference<PagedResources<User>>() {}
);
assertTrue(responseEntity.getStatusCode() == HttpStatus.OK);
PagedResources<User> userResource = responseEntity.getBody();
Collection<User> users = userResource.getContent();
assertNotNull(users);
assertEquals(3, users.size());
}
}