我正在使用SpringBoot运行一个项目。在这个项目中,我打电话给外部休息服务。我已将响应项建模为bean。 但是当我收到响应时,数据没有被序列化到bean中。 我想一定有一些配置缺失,但我找不到。
我已将onfiguration spring-boot-starter-test添加到Maven的配置中:
其他客户:
@RunWith(SpringRunner.class)
@SpringBootTest
public class RestClientTest {
@Autowired
private RestTemplateBuilder restTemplate;
@Test
public void sayHello() {
System.out.println("Hello");
assert(true);
}
@Test
public void testGetEmployee() {
RestTemplate template = restTemplate.build();;
HttpHeaders headers = new HttpHeaders();
List<MediaType> types = new ArrayList<MediaType>();
types.add(MediaType.APPLICATION_JSON);
types.add(MediaType.APPLICATION_XML);
headers.setAccept(types);
headers.set("Authorization", "Bearer gWRdGO7sUhAXHXBnjlBCtTP");
HttpEntity<Items> entity = new HttpEntity<Items>(headers);
String uri = "https://mytest.com/employees";
//ResponseEntity<String> rec = template.exchange(uri, HttpMethod.GET, entity, String.class);
//System.out.println("Received: " + rec);
ResponseEntity<Items> rec = template.exchange(uri, HttpMethod.GET, entity, Items.class);
System.out.println("Received: " + rec);
}
}
当我检查响应元素时,我得到一个列表,所有项都是空值
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public class Item implements Serializable {
@JsonProperty
private String id;
@JsonProperty
private String name;
@JsonProperty
private String email;
@JsonProperty
private String phone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public class Items implements Serializable {
@JsonProperty
private List<Item> items = new ArrayList<Item>();
public List<Item> getItems() {
return items;
}
}
你看到我在这里失踪了吗?
响应是这样的:
{
"items": [
{
"item": {
"id": 0,
"name": "string",
"email": "string",
"phone": "string",
你看到我在这里失踪了吗?
由于
吉勒
答案 0 :(得分:0)
您实现的方法将尝试将数据反序列化为Items类。但是它没有反序列化所需的属性。当需要通过其余模板交换获取数据列表时,可以按以下方式获取它们。
获取数据作为数组并将其转换为arrayList。
Item[] itemArray = template.exchange(uri, HttpMethod.GET, entity, Item[].class).getBody();
List<Item> itemList = Arrays,asList(itemArray);
或
使用ParameterizedTypeReference将数据作为列表获取
ResponseEntity<List<Item>> itemList = template.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<Item>>() {});
List<Item> itemList = template.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<Item>>() {}).getBody(); // access list directly
答案 1 :(得分:-1)
您可能需要将其添加到ObjectMapper中:
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
在您的实体上添加@JsonRootName("item")