java - 如何更改 ResponseEntity 中的 JSON 响应格式?

标签 java spring rest spring-boot spring-data-jpa

我有一些 REST Controller ,它可以生成对用户的响应并将其发送。

  @RequestMapping(method = RequestMethod.GET, value = "/hello/contacts")
    public ResponseEntity<Page<ContactDto>> getContacts(@RequestParam(name = "nameFilter") String nameFilter
    , @RequestParam(name = "page", required = false, defaultValue = "1") int page
    , @RequestParam(name = "size", required = false, defaultValue = "100") int size) {

        List<ContactDto> contacts = contactService.getContacts(nameFilter);

        Pageable pagiable = PageRequest.of(page - 1, size);
        int start = (page - 1) * size;
        int end = start + size;

        Page<ContactDto> pages;
        if (end <= contacts.size()) {
            pages = new PageImpl<>(contacts.subList(start, end), pagiable, contacts.size());
            return new ResponseEntity<>(pages, HttpStatus.OK);
        } else {
            if (start < contacts.size()) {
                contacts.size();
                pages = new PageImpl<>(contacts.subList(start, contacts.size()), pagiable, contacts.size());
                return new ResponseEntity<>(pages, HttpStatus.OK);
            }
        }

        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }

发送响应后,用户获得以下格式的 JSON 响应:

{
    "content": [
        {
            "id": 1,
            "name": "Rm7W8bDq7z"
        },
        {
            "id": 2,
            "name": "vYYWLImOWe"
        },
        {
            "id": 3,
            "name": "gRKokZFEdf"
        }],``
    "pageable": {
        "sort": {
            "sorted": false,
            "unsorted": true,
            "empty": true
        },
        "offset": 0,
        "pageNumber": 0,
        "pageSize": 100,
        "paged": true,
        "unpaged": false
    },
    "totalPages": 10,
    "totalElements": 999,
    "last": false,
    "size": 100,
    "number": 0,
    "sort": {
        "sorted": false,
        "unsorted": true,
        "empty": true
    },
    "numberOfElements": 100,
    "first": true,
    "empty": false
}

我想将 JSON 属性名称 content 更改为其他名称,例如 "contacts"。 我怎样才能做到这一点?

最佳答案

一般来说你不能。因为Page内容并且与业务无关。对于 Page 来说,它所包含的内容是中性的。
但我认为以下解决方法可以提供帮助。
您需要创建一个自定义页面类。

public class CustomPageImpl<T> extends PageImpl<T>{
@JsonProperty("contacts")
public List<T> getContent() {
  return super.getContent();
}
}

然后使用这个自定义页面类返回结果。

关于java - 如何更改 ResponseEntity 中的 JSON 响应格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313938/

相关文章:

java - 为什么java导入org.apache.http包后找不到StringEntity类?

java - 使用 spring boot 和 mongodb 检索具有完整和不完整配置文件的用户数量的最佳方法是什么?

java - 为什么注解@Value在使用Spring PropertySourcesPlaceholderConfigurer时总是返回null?

java - 如何告诉 Jersey 我的 MessageBodyWriter 在哪里?

java - 使用 Java 的 MySQL 数据库出现阿拉伯字符问题

java - 补间被忽略 LibGDX

java - Mysql DB连接JDBC卡住程序

java - Spring 应用程序在 eclipse 中工作,但在 tomcat 8 上部署时同样不工作

rest - Partner Central Rest API 401未经授权访问

web-services - SOAP 必须是有状态的吗?