当包含 Spring 数据剩余时,Spring 以纯 JSON 而非 HAL 格式返回资源

2024-01-10

当我为我的实体使用 Spring Data Rest 提供的默认控制器时,一切都会正常工作。输出如下所示:

{
  "_links" : {
    "search" : {
      "href" : "http://localhost:8080/users/search"
    }
  },
  "_embedded" : {
    "users" : [ {
      "firstName" : "Max",
      "lastName" : "Mustermann",
      "email" : "[email protected] /cdn-cgi/l/email-protection",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/users/myadmin"
        }
      }
    } ]
  }
}

但如果我使用自己的控制器,输出将如下所示:

[ {
  "firstName" : "Max",
  "lastName" : "Mustermann",
  "email" : "[email protected] /cdn-cgi/l/email-protection",
  "links" : [ {
    "rel" : "self",
    "href" : "http://localhost:8080/user/myadmin"
  } ]
} ]

我的控制器

@RestController
@RequestMapping("/user")
@EnableHypermediaSupport(type = {HypermediaType.HAL})
public class UserController {

    @Autowired
    UserRepository userRepository;

    @RequestMapping(method=RequestMethod.GET)
    public HttpEntity<List<User>> getUsers(){
        ArrayList<User> users = Lists.newArrayList(userRepository.findAll());
        for(User user : users){
            user.add(linkTo(methodOn(UserController.class).getUser(user.getUsername())).withSelfRel());
        }
        return new ResponseEntity<List<User>>(users, HttpStatus.OK);
    }

    @RequestMapping(value="/{username}", method= RequestMethod.GET)
    public HttpEntity<User> getUser(@PathVariable String username){
        User user = userRepository.findByUsername(username);
        user.add(linkTo(methodOn(UserController.class).getUser(user.getUsername())).withSelfRel());
        return new ResponseEntity<User>(user, HttpStatus.OK);
    }
}

My User:

@Entity
@Table(name="users")
public class User extends ResourceSupport{
    @Id
    private String username;

    private String firstName;
    private String lastName;

    @JsonIgnore
    private boolean enabled;

    @JsonIgnore
    private String password;

    @Column(unique =  true)
    private String email;

    public User(){
        enabled = false;
    }
    //Getters and Setters
}

如果我删除 spring data Rest 依赖项并包含 spring-hateoas、spring-plugin-core 和 json-path (com.jayway.jsonpath) 它可以工作..但我想对其他一些实体使用 spring-data-rest

两个问题:

  1. 为什么 HAL 不默认包含 Spring Data Rest?
  2. 如何将 HAL 设置为输出格式

您需要返回一个子类型ResourceSupport(通常Resource or Resources)让 HAL Jackson 转换器启动。

Also, @EnableHypermediaSupport必须在 JavaConfig 配置类上使用,而不是在控制器上使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当包含 Spring 数据剩余时,Spring 以纯 JSON 而非 HAL 格式返回资源 的相关文章

随机推荐

  • Google Chrome 应用程序:Web 视图行为

    在研究一个问题时在 Chrome 扩展中
  • 在react-router中配置应用程序的基本名称

    我在反应路由器 2 x 配置方面遇到了一些困难 特别是应用程序基本名称 我有一个应用程序 在其整个生命周期中可能有不同的基本根 例如 开发中 users生产中 account迁移后投入生产 基本名称在几个地方发挥作用 Webpack 中的静
  • 如何在 Objective-C 中以编程方式发送带有某些正文文本的短信 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 iPhone 上以编程方式发送短信 https stackoverflow com questions 10848 how to programmatically send sms on th
  • Java 8 中致命的死亡钻石

    我是一名 Java 开发人员 同时也在学习 C 我最近进入了 C 中的 死亡钻石 并研究了这个问题在 Java 中是否可能出现 在接口是否解决了 致命的死亡钻石 问题 https stackoverflow com questions 98
  • 使用 ProGuard 和 Android 应用程序时出现重复资源

    我正在尝试将 ProGuard 与我的一个应用程序 假设为 A 一起使用 该应用程序包含另一个应用程序作为库 假设为 B 这是我的 proguard 文件 optimizationpasses 5 dontusemixedcaseclass
  • Hibernate ManyToMany 自连接是否可以用于非键列?获取映射异常

    我遇到以下问题 我有一个与其他用户实体具有多对多关系的用户实体 因此 我想使用多位注释进行自连接 这种关系基于整个系统使用的现有表 因此我根本无法对数据库进行更改 所以我们有 2 个表 User Id ShortName 和 UserLin
  • Linux 磁盘缓存和 kmalloc 与 GFP_ATOMIC

    在一些知名的article https www linuxatemyram com 关于Linux磁盘缓存有这样的说法 绝对没有理由禁用它 Also 一个拥有足够内存的健康 Linux 系统 在运行一段时间后 会显示以下预期且无害的行为 可
  • 我应该如何处理 API 中的错误?

    我正在编写一个 API 它封装了一些核心基础 Web 功能 可以返回许多可能的错误条件 我正在努力决定处理 API 使用者应该处理的错误情况的最佳方法 例如网络超时 接收意外结果 格式错误的 XML 等 我提出了 3 个不同的模型 但不确定
  • 新的 Facebook SDK 应用程序不可用:您尝试使用的应用程序不再可用或访问受到限制

    新用户无法通过 Facebook 登录 并收到一条错误消息 应用程序不可用 您尝试使用的应用程序不再可用或访问受到限制 用户使用现有的 Facebook 帐户进行访问没有任何问题 当我在 Facebook 上创建虚假 测试帐户时 我遇到了这
  • 如何从文件名获取完整文件路径?

    如何获取给定文件的完整路径 例如我提供 string filename test txt 结果应该是 Full File Path C Windows ABC Test test txt Try string fileName test t
  • 应用程序范围的全局变量

    In Rails 我应该在哪里定义Rails堆栈的每一层都可以识别的变量 例如 我想要一个CUSTOMER NAME John 可以访问的变量helper rake task 控制器 and model 我应该在哪里定义这个变量Rails
  • jQuery 当前位置和滚动位置之间的差异

    我试图获取元素距顶部的当前距离与其滚动后的下一个位置之间的差异 事实上 我试图根据其距离来选择动画持续时间 我写了下面的代码 但它不能正常工作 I have 6菜单项 当我单击每个菜单项时 窗口滚动到其位置 但问题是 当我单击最后一项时 它
  • 从控制台运行 Zend Framework 2 操作不起作用

    我有一个 ZF2 应用程序从 Web 服务器正常运行 我需要从命令行运行一些操作 因为我想要执行一些计划任务 cron 作业 所以我找到了这些有用的链接 Zend框架的官方文档 http framework zend com manual
  • 将 vuex 状态与服务器同步的推荐策略

    想象一下这个简单的例子 您有一个 Vue JS 应用程序 用户可以在其中创建任务列表并对它们进行排序 这些列表应由服务器存储在数据库中 假设我们有一个ListComponent它完成了大部分用户体验 我的问题是 我应该使用哪种模式来处理前后
  • 最佳开源 LINQ 提供商 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何更改 C++ STL 向量的特定元素

    vector
  • 表达式等于

    所以 我正在尝试找出表达式树 我试图添加动态等于可查询 其中 T 是几个不同的表之一 我首先检查表中是否包含我想要过滤的字段 ParameterExpression param Expression Parameter typeof TSo
  • COM 中的内存管理

    在COM服务器执行期间分配一块内存 然后通过输出参数将该内存块传递给客户端是很常见的 然后 客户端有义务使用 CoTaskMemFree 等方法释放该内存 问题是 这块内存分配在哪里 假设COM服务器和COM客户端处于不同的进程中 为了让客
  • TypeScript 中 jQuery 对象的类型是什么?

    我应该为 jQuery 元素使用什么类型 没有 jQuery 我会这样继续 export class Modal constructor protected element HTMLElement 但是 可以说element将是一个 jQu
  • 当包含 Spring 数据剩余时,Spring 以纯 JSON 而非 HAL 格式返回资源

    当我为我的实体使用 Spring Data Rest 提供的默认控制器时 一切都会正常工作 输出如下所示 links search href http localhost 8080 users search embedded users f