Java 在Spring Boot中使用RestClient反序列化Rest API页面
我们使用的RESTAPI将返回页面中的结果。以下是一个例子: 事件Bean类:Java 在Spring Boot中使用RestClient反序列化Rest API页面,java,spring-boot,rest,Java,Spring Boot,Rest,我们使用的RESTAPI将返回页面中的结果。以下是一个例子: 事件Bean类: @Getter @Setter @ToString @NoArgsConstructor @AllArgsConstructor @JsonIgnoreProperties public class Event implements Serializable { /** * */ private static final long serialVersionUID = -761
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties
public class Event implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7613296461448310227L;
private String name;
private String id;
private String type;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties
public class EventList {
@JsonProperty("events")
private List<Event> events = null;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties
public class EventResponse {
@JsonProperty("_embedded")
private EventList responseList = null;
}
事件列表Bean类:
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties
public class Event implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7613296461448310227L;
private String name;
private String id;
private String type;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties
public class EventList {
@JsonProperty("events")
private List<Event> events = null;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties
public class EventResponse {
@JsonProperty("_embedded")
private EventList responseList = null;
}
使用RestTemplate调用Rest API的逻辑:
ParameterizedTypeReference<RestResponsePage<Event>> responseType = new ParameterizedTypeReference<RestResponsePage<Event>>() {
};
ResponseEntity<RestResponsePage<Event>> response = this.restTlsTemplate
.exchange(this.url, HttpMethod.GET, entity, responseType);
RestResponsePage<Event> eventsResources = response.getBody();
Collection<Event> eventsCollection = eventsResources.getContent();
ParameteredTypeReference responseType=新的ParameteredTypeReference(){
};
ResponseEntity response=this.restTlsTemplate
.exchange(this.url、HttpMethod.GET、entity、responseType);
RestResponsePage eventsResources=response.getBody();
Collection Events Collection=eventsResources.getContent();
RestResponsePage类别:
@JsonIgnoreProperties(ignoreUnknown = true)
public class RestResponsePage<T> extends PageImpl<T> {
/**
*
*/
private static final long serialVersionUID = -5317908588846766606L;
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public RestResponsePage(@JsonProperty("content") List<T> content,
@JsonProperty("number") int number,
@JsonProperty("size") int size,
@JsonProperty("totalElements") Long totalElements,
@JsonProperty("pageable") JsonNode pageable,
@JsonProperty("last") boolean last,
@JsonProperty("totalPages") int totalPages,
@JsonProperty("sort") JsonNode sort,
@JsonProperty("first") boolean first,
@JsonProperty("numberOfElements") int numberOfElements) {
super(content, PageRequest.of(number, size), totalElements);
}
public RestResponsePage(List<T> content, Pageable pageable, long total) {
super(content, pageable, total);
}
public RestResponsePage(List<T> content) {
super(content);
}
public RestResponsePage() {
super(new ArrayList<>());
}
}
@JsonIgnoreProperties(ignoreUnknown=true)
公共类ResponsePage扩展了PageImpl{
/**
*
*/
私有静态最终长serialVersionUID=-5317908588846766606L;
@JsonCreator(mode=JsonCreator.mode.PROPERTIES)
公共ResponsePage(@JsonProperty(“内容”)列表内容,
@JsonProperty(“数字”)整数,
@JsonProperty(“大小”)int size,
@JsonProperty(“totalElements”)长totalElements,
@JsonProperty(“可分页”)JsonNode可分页,
@JsonProperty(“last”)布尔值last,
@JsonProperty(“totalPages”)int totalPages,
@JsonProperty(“排序”)JsonNode排序,
@JsonProperty(“第一”)布尔值优先,
@JsonProperty(“numberOfElements”)int numberOfElements){
super(内容、页面请求、数量、大小、元素总数);
}
公共ResponsePage(列表内容、可分页、长总计){
超级(内容、可分页、总计);
}
公共厕所响应区(列表内容){
超级(内容);
}
公共厕所响应区(){
super(新的ArrayList());
}
}
尝试上述操作时会引发异常:
Error=JSON转换问题:无法构造
…ResponsePage的实例,问题:页面大小不能小于1!;嵌套异常为com.fasterxml.jackson.databind.exc.valueInstanceException:无法构造
…ResponsePage的实例,问题:页面大小不能小于一!在[Source:(PushbackInputStream);行:81,列:1]| JSON转换问题:无法构造
…ResponsePage的实例,问题:页面大小不能小于1!;嵌套异常为com.fasterxml.jackson.databind.exc.valueInstanceException:无法构造
…ResponsePage的实例,问题:页面大小不能小于一!在[源:(PushbackInputStream);行:81,列:1]
我看到过一些类似于这个问题的帖子,但我也尝试过同样的方法,但效果并不理想。因此,任何人都可以在这方面帮助我,因为我没有得到这个问题,而且我是Rest客户端反序列化页面的新手。重复此内容:@Krishna您能解决这个问题吗?就连我也遇到了这个问题。重复这个:@Krishna你能解决这个问题吗?就连我也有这个问题。