【问题标题】:How to POST/PUT on a Map<String,Entity> collection association如何在 Map<String,Entity> 集合关联上发布/放置
【发布时间】:2017-04-28 06:57:13
【问题描述】:

也许是一个愚蠢的问题,但是如何使用 POST/PUT 请求更新带有Spring Data Rest 的暴露实体的类型化映射collection association 的内容?

我知道如何使用Content-Type: text/uri-list 发布/放置列表或设置关联,但我不使用键/值映射

编辑

我尝试在 PUT 请求的主体上发送资源 URI,并在关联端点上使用 Content-Type: text/uri-list。我没有给出任何错误,但它用以下内容替换了 Map 的所有先前内容:

{ 
   self: { ENTITY content} 
} 

所以它似乎受到支持(副作用?)。它将密钥命名为self。 我不知道如何指定密钥。

【问题讨论】:

  • 什么都没有,因为我不知道在 HTTP 正文上设置什么。
  • 关系是双向的,关联类型是否有一个作为 Rest 资源导出的存储库?如果是这样,另一种方法是发布到相关类型的存储库的端点。
  • 我的问题不是特定于用例,而是“如何”在春季数据休息中做到这一点。我尝试了是否导出了关联的实体存储库。该关联不是双向的。我在JIRA issue 中做了一个简单的演示项目,我围绕这个问题发布了

标签: java spring spring-data-rest


【解决方案1】:
@WebService
@Path("/test")
public class TestResource {


    @GET
    @Produces(APPLICATION_JSON)
    public HashMap<String, String> findAll() {

        HashMap<String, String> test = new HashMap<>();
        test.put("key1", "value1");
        test.put("key2", "value2");
        return test;
    }

这会在前端生成 JSON:

{"key2":"value2","key1":"value1"}

但是,这确实使用了可能不是您所追求的 application/json 内容类型?

【讨论】:

  • 对不起,这不能回答我的问题。我使用 Spring Data Rest 自动将我的域模型实体类公开到休息资源中。 GET 资源运行良好,但我不知道如何在 Map 关联上发布或 PUT。
  • 查看从 get 中获得的数据,然后将相同的数据发布回来!
  • Spring Data Rest 在实体关联上创建特殊的子资源端点,允许您在它们上发布或放置资源 URI 列表 (HATEOAS)。这是在Spring Data Rest 中处理关联的正常方式。我不知道关联类型是 Java Map 的情况。我需要指定密钥,但我不知道如何,如果可能的话,以及这样做的正常方法。
  • 所以问题在于实体映射而不是发送到资源的内容类型?
  • 问题是:当关联使用@*-ToMany 映射 时,如何在association resource 上发布/放置请求
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2013-09-22
  • 1970-01-01
  • 2016-07-10
  • 2015-07-06
相关资源
最近更新 更多