catnap icon indicating copy to clipboard operation
catnap copied to clipboard

Spring Data - PagingAndSortingRepository with @CatnapResponseBody

Open onek13 opened this issue 7 years ago • 3 comments

I'm working on a Spring REST project and wanted to utilize catnap features.

However it seems not fully working if i use PagingAndSortingRepository though i found a work around for it.

I think would be nice if we can directly return the org.springframework.data.domain.Page from our RestControllers and still be able to do partial response filtering.

Please see details below

Sample response / expected response.

{
    "content": [
        {
            "name": "Name 1"
        },
        {
            "name": "Name 2"            
        }
    ],
	"size": 5,
    "number": 5,
    "last": true,
    "sort": null,
    "first": false,
    "numberOfElements": 2,
    "totalPages": 6,
    "totalElements": 0
}

Only content from sample response above can do partial response filtering, was not able to get some fields outside the content (eg. totalPages, totalElements) using the code below

@CatnapResponseBody
   @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
   public Page<User> getList(Pageable pageable) {
       return userService.getUserList(pageable);
   }

Below is the workaround code. Need to somehow copy the properties from org.springframework.data.domain.Page<User> into my custom JsonResponseList<User>

@CatnapResponseBody
   @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
   public JsonResponseList<User> getList(Pageable pageable) {
       JsonResponseList<User> jsonResponseList = new JsonResponseList<User>();
       Page<User> pageUser = userService.getUserList(pageable);
       BeanUtils.copyProperties(pageUser, jsonResponseList, "");
       return jsonResponseList;
   }

onek13 avatar Mar 01 '18 05:03 onek13

any updates?

manuelarte avatar Jan 06 '19 10:01 manuelarte

JsonResponseList

can you paste the code of JsonResponseList

manuelarte avatar Jan 06 '19 20:01 manuelarte

@manuelarte

Please see code below.

public class JsonResponseList<T> {

    private List<T> m_content;
    private boolean m_first;
    private boolean m_last;
    private int m_number;
    private int m_numberOfElements;
    private int m_size;
    private String m_sort;
    private long m_totalElements;
    private int m_totalPages;

    public List<T> getContent() {
        return m_content;
    }

    public int getNumber() {
        return (m_number + 1);
    }

    public int getNumberOfElements() {
        return m_numberOfElements;
    }

    public int getSize() {
        return m_size;
    }

    public String getSort() {
        return m_sort;
    }

    public long getTotalElements() {
        return m_totalElements;
    }

    public int getTotalPages() {
        return m_totalPages;
    }

    public boolean isFirst() {
        return m_first;
    }

    public boolean isLast() {
        return m_last;
    }

    public void setContent(List<T> content) {
        m_content = content;
    }

    public void setFirst(boolean first) {
        m_first = first;
    }

    public void setLast(boolean last) {
        m_last = last;
    }

    public void setNumber(int number) {
        m_number = number;
    }

    public void setNumberOfElements(int numberOfElements) {
        m_numberOfElements = numberOfElements;
    }

    public void setSize(int size) {
        m_size = size;
    }

    public void setSort(String sort) {
        m_sort = sort;
    }

    public void setTotalElements(long totalElements) {
        m_totalElements = totalElements;
    }

    public void setTotalPages(int totalPages) {
        m_totalPages = totalPages;
    }

}

onek13 avatar Jan 07 '19 00:01 onek13