spring hateoas为收集或pojo产生不同的反应

时间:2016-01-12 19:39:06

标签: spring spring-hateoas

我有两个班级

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() {

  }

}

这两个响应都添加了链接对象,但是对于资源A来说,是#34;链接&#34;资源B是&#34; _link&#34;以及结构变化

//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

添加链接
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的响应标头是

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

和b

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

可能是因为返回一个数组并不是真的很安静吗?正如一些帖子所暗示的那样

P.S。我添加并删除了@EnableHypermediaSupport,但似乎没有影响到这个问题。

1 个答案:

答案 0 :(得分:1)

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

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