Spring RestTemplate with paginated API

前端 未结 7 2098
被撕碎了的回忆
被撕碎了的回忆 2020-11-27 17:22

Our REST APIs are returning results in Pages. Here is an example of one Controller

@RequestMapping(value = \"/search\", method = RequestMethod.GET, produces          


        
7条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-27 17:32

    Solution in Kotlin

    import com.fasterxml.jackson.annotation.JsonCreator
    import com.fasterxml.jackson.annotation.JsonProperty
    import com.fasterxml.jackson.databind.JsonNode
    import org.springframework.data.domain.PageImpl
    import org.springframework.data.domain.PageRequest
    import org.springframework.data.domain.Pageable
    
    import java.util.ArrayList
    
    class RestResponsePage : PageImpl {
        @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
        constructor(@JsonProperty("content") content: List,
                    @JsonProperty("number") number: Int,
                    @JsonProperty("size") size: Int,
                    @JsonProperty("totalElements") totalElements: Long?,
                    @JsonProperty("pageable") pageable: JsonNode,
                    @JsonProperty("last") last: Boolean,
                    @JsonProperty("totalPages") totalPages: Int,
                    @JsonProperty("sort") sort: JsonNode,
                    @JsonProperty("first") first: Boolean,
                    @JsonProperty("numberOfElements") numberOfElements: Int) : super(content, PageRequest.of(number, size), totalElements!!) {
        }
    
        constructor(content: List, pageable: Pageable, total: Long) : super(content, pageable, total) {}
    
        constructor(content: List) : super(content) {}
    
        constructor() : super(ArrayList()) {}
    }
    

    and request

    var response: ResponseEntity<*> = restTemplate.getForEntity>(url)
    

    Solution in Java

    import com.fasterxml.jackson.annotation.JsonCreator;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.databind.JsonNode;
    import org.springframework.data.domain.PageImpl;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class RestResponsePage extends PageImpl {
        @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
        public RestResponsePage(@JsonProperty("content") List 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 content, Pageable pageable, long total) {
            super(content, pageable, total);
        }
    
        public RestResponsePage(List content) {
            super(content);
        }
    
        public RestResponsePage() {
            super(new ArrayList<>());
        }
    }
    

提交回复
热议问题