我的其余Web服务返回以下输出:
{
"result": {
"TICKET1": {
"number": "TICKET1",
"description": "aa"
},
"TICKET2": {
"number": "TICKET2",
"description": "dd"
}
}
}
要将其转换为我尝试过的故障单列表,
class TicketResponse {
private List<Ticket> result;
// Get Set
}
class Ticket {
private String number;
private String description;
// Get Set
}
TicketResponse response = restTemplate.getForObject(WEB_SERVICE_URL, TicketResponse.class);
但是我得到response
为空。怎么做。
答案 0 :(得分:0)
您提供的对象不包含列表/数组,该列表/数组位于方括号内,如下所示:
{
"result": {
"tickets": [
{
"number": "TICKET1",
"description": "aa"
},
{
"number": "TICKET2",
"description": "dd"
}
]
}
}
如果可能,请更改服务以返回列表/数组。否则,您将拥有一个对象,其中包含名为TICKET1和TICKET2的各个字段,因此每个字段都需要一个字段。
答案 1 :(得分:0)
我将提供两种方法来处理您拥有的JSON结构。
选项1:
按如下所示修改您的TicketResponse
类:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
public class TicketResponse {
@JsonProperty("result")
private Map<String, Ticket> ticketsMap = new HashMap<>();
@JsonAnySetter
public void setUnknownField(String name, Ticket value) {
ticketsMap.put(name, value);
}
@JsonIgnore private List<Ticket> ticketsList;
public List<Ticket> getTicketsList() {
return ticketsMap.entrySet().stream().map(Entry::getValue).collect(Collectors.toList());
}
}
然后您可以从以下位置获取门票清单:
response.getTicketsList();
选项2:
阅读您对String
的回复
String response = restTemplate.getForObject(WEB_SERVICE_URL, String.class);
并使用以下代码将其转换为List<Ticket>
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(response);
JsonNode wantedJsonNode = jsonNode.get("result");
Map<String, Ticket> map =
mapper.convertValue(wantedJsonNode, new TypeReference<Map<String, Ticket>>() {});
List<Ticket> tickets =
map.entrySet().stream().map(Entry::getValue).collect(Collectors.toList());
答案 2 :(得分:0)
TicketResponse必须具有与服务响应相对应的结构。 您可以更改TicketResponse类并添加getTicketArray方法:
public class TicketResponse {
private Map<String,Ticket> result;
// getter setter
public List<Ticket> getTicketsAsArray(){
return new ArrayList<Ticket>(result.values());
}
}