java - 如何手动创建 Spring Data Rest 实体响应格式

标签 java spring rest spring-data-rest spring-hateoas

我正在使用 Spring Data Rest 创建 RESTful api。我想处理返回实体表示形式的异常,例如 Spring Data Rest 存储库(带有 HATEOAS 链接)生成的实体表示形式。我需要返回实体表示的方法如下:

@ExceptionHandler(value = {ExistentUGVException.class})
@ResponseBody
protected ResponseEntity<UGV> existentUGVHandler(HttpServletRequest request, HttpServletResponse response, ExistentUGVException ex) {
    return new ResponseEntity<UGV>(ex.ugv, HttpStatus.OK);
}

此实现返回不带链接的 UGV 表示:

{
   "title" : "Golden Eagle Snatches Kid",
   "publishDate" : "2012-12-19T13:55:28Z",
   "url" : "https://www.youtube.com/watch?v=Xb0P5t5NQWM"
}

但它会是:

{
    "title" : "Golden Eagle Snatches Kid",
    "publishDate" : "2012-12-19T13:55:28Z",
    "url" : "https://www.youtube.com/watch?v=Xb0P5t5NQWM",
    "_links" : {
        "self" : {
            "href" : "http://localhost/youTubeVideos/Xb0P5t5NQWM"
        },
        "youTubeVideo" : {
            "href" : "http://localhost/youTubeVideos/Xb0P5t5NQWM{?projection}",
            "templated" : true
        },
        "user" : {
            "href" : "http://localhost/youTubeVideos/Xb0P5t5NQWM/user"
        }
    } 
}

最佳答案

您必须首先将 ResponseEntity 转换为 Resource,然后手动添加链接。

应该是这样的:

@ExceptionHandler(value = {ExistentUGVException.class})
@ResponseBody
protected ResponseEntity<Resource<UGV>> existentUGVHandler(HttpServletRequest request, HttpServletResponse response, ExistentUGVException ex) {
    final Resource<UGV> resource = getResource(ex.ugv);
    return new ResponseEntity<Resource<UGV>>(resource, HttpStatus.OK);
}

public Resource<T> getResource(T object, Link... links) throws Exception {
    Object getIdMethod = object.getClass().getMethod("getId").invoke(object);
    Resource<T> resource = new Resource<T>(object); // The main resource
    final Link selfLink = entityLinks.linkToSingleResource(object.getClass(), getIdMethod).withSelfRel();
    String mappingRel = CLASSMAPPING.getMapping(this.getClass());
    final Link resourceLink = linkTo(this.getClass()).withRel(mappingRel);
    resource.add(selfLink, resourceLink);
    resource.add(links);
    return resource;
}

看看这里,这里有你需要的一切:spring hateoas documentation

关于java - 如何手动创建 Spring Data Rest 实体响应格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37522621/

相关文章:

java - JPA中的乐观锁是什么?

java - 从 ArrayList 中删除多个元素的快速算法

用于启用和禁用的 RESTFul 模式 URL

java - 同步访问 REST Web 服务

java - 在 Java SWT 中获取菜单控件的大小

Java:线程:添加具有 ID 的元素以从不同线程列出

java - 除主以外的 Hibernate OneToMany 关联

java - SpringBoot 2.0.5应用程序启动后失败

Spring 启动 : How to add another WAR files to the embedded tomcat?

java - 有没有办法附加到@Path 的末尾