spring hateoas 为 collection 或 pojo 生成不同的响应

spring hateoas generates different responses for collection or pojo

我有两个类

import org.springframework.hateoas.ResourceSupport;

public class A{}
public class B{}

public class AResource extends ResourceSupport {
  private final A a;
}
public class BResource extends ResourceSupport {
  private final B b;
}

@Controller
public class Controller {
  @RequestMapping
  @ResponseBody
  public Set<AResource> giveMeColl() {

  }
  @RequestMapping
  @ResponseBody
  public BResource giveMeSingle() {

  }

}

两个响应都添加了 links object,但资源 A 是 "links",资源 B 是“_link”,结构也发生了变化

//RESPONSE FOR A 
[  
   {  
      "content":{  
         //my fancy object
      },
      "links":[  
        {
        "rel": "self",
        "href":         "http://localhost:8080/myid/22"
        }
      ]
   }
]



{  
    "content":{  
             //my fancy object
    },
    "_links":[  
     {
         "self":         "http://localhost:8080/myid/22/someelse/33"
     }]
 }

两种资源都是用汇编程序构建的,并且都从 ids

添加 link
AResource aresource = new AResource(a);
resource.add(linkTo(methodOn(Controller.class).giveMeColl()).withSelfRel());

BResource bresource = new BResource(b);
resource.add(linkTo(methodOn(Controller.class).giveMeSingle()).withSelfRel());

对 a 的响应 headers 是

"content-type": "application/json;charset=UTF-8"

和 b

"content-type": "application/hal+json;charset=UTF-8"

难道是因为返回数组不是真的Restful?正如一些 post 建议

p.s。我添加和删除了@EnableHypermediaSupport,但似乎没有影响问题。

"_links"HAL specification 之后。 Spring HATEOAS 包含一个专用的序列化程序,但它仅用于扩展 ResourceSupport.

的 类

返回一个简单的数组并不完全是"unRESTful",但它不符合 REST 成熟度级别 3(超媒体控件)。为了实现这一点,您可以将集合包装到一个扩展 ResourceSupportResources 实例中。然后,您应该为这两种类型获得相同的 link 序列化。