【问题标题】:Spring Rest Data how to change default format removing "_" underscore from json responseSpring Rest Data如何更改从json响应中删除“_”下划线的默认格式
【发布时间】:2016-09-04 15:32:48
【问题描述】:

默认情况下,当我点击暴露的存储库时,我会得到一个如下所示的 JSON:

{
    _links: {}, 
    _embedded: {}, //actual content
    page: {} //paging enabled
}

有没有办法去掉链接和嵌入这个词开头默认生成的下划线字符? _embedded 内有 _links 的嵌套外观,所以我猜它们都配置在同一个地方。

我需要这样的东西来代替

{
    links: {},
    embedded: {},
    page: {}
}

我使用默认配置

@Import(RepositoryRestMvcConfiguration.class)

提前致谢。

【问题讨论】:

标签: java json spring rest spring-data-rest


【解决方案1】:

因为这就是 HAL 的表示方式(请参阅 Ali 评论中的链接),“可能不”(我不声称知道超过 1% 的 Spring Data Rest 功能)......是的,因为有配置属性 defaultMediaType ,您可以通过 spring.data.rest.defaultMediaType=application/json 将其设置为 application/json ,因此您的 Spring Data Rest 将生成它而不是 application/hal+json

这不会完全符合您的要求,但也会更改其他一些内容,但可能足够接近。但是当然,如​​果去掉一些下划线值得完全去掉 hal+json,你应该觉得很好。

也许更好的问题是,“为什么”你想去掉下划线,但这可能更像是一个讨论而不是一个问题。

【讨论】:

  • 公平点。 “为什么”是因为我使用了一个专有框架,在定义能够直接进行映射的对象时,它不允许 _ 作为属性名称。
  • 虽然你的建议是适用的。它不会从 json 响应中删除 _,至少在 2.4.4.RELEASE
  • 刚刚尝试了一个简单的演示应用程序,我在 application.properties 中配置的唯一内容是单行 spring.data.rest.defaultMediaType=application/json,我得到像 "links" 这样的名称(而不是 "_links"),@ 987654328@(而不是"_embedded")。所以对我有用,确定你没有其他设置干扰吗?
  • 我没有使用弹簧靴。你是?我的是一个现有的 MVC web spring 项目,后来丰富了 spring data rest。我根据文档使用@Component CustomizedRestMvcConfiguration 来执行您建议的设置而不是.properties。让我们将其标记为已回答,我相信你 ;)
  • 我的错,我假设是 Spring Boot。当然,如果没有 Spring Boot,您将不得不更多地手动进行配置......所以我唯一能说的是,使用 Spring Boot 它可以这样工作,抱歉 ;-)
【解决方案2】:

您不应该这样做,现在您处于休息级别 3 (HAL/HATEOAS),这是一件好事。如果您知道如何使用它,这将有很多好处。 http://martinfowler.com/articles/richardsonMaturityModel.html#level3

您始终可以通过从spring-data-rest-core 中排除spring-hateoas 来进入第2 级,但我不建议这样做。

HAL 的正式规范:https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-07

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多