如何正确实现使用 Spring MVC\Boot 返回图像列表的 REST 服务?

Posted

技术标签:

【中文标题】如何正确实现使用 Spring MVC\\Boot 返回图像列表的 REST 服务?【英文标题】:How to correctly implement a REST service that returns a list of images using Spring MVC\Boot?如何正确实现使用 Spring MVC\Boot 返回图像列表的 REST 服务? 【发布时间】:2017-04-05 03:57:47 【问题描述】:

我不太喜欢 RESTful Web 服务,我对使用 RESTful 范式如何正确返回图像列表有以下疑问。

我正在开发一个 Spring Batch 应用程序(但它与使用 Spring MVC 实现此目的相同)。我有这个控制器方法,它向客户端返回图像列表作为转换为 JSON 消息的字节数组列表

我是这样实现的:

@RequestMapping(value = "getAllImagesByRoomId",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<byte[]>> getAllImagesByRoomId(Long roomId) throws DataAccessException 

    log.debug("getAllImagesByRoomId START");

    List<byte[]> result = roomMediaService.getRoomImageListById(roomId);

    log.debug(result.toString());

    log.debug("getAllImagesByRoomId END");

    return ResponseEntity.ok(result);


它工作得很好,我的客户从返回的 JSON 中检索图像。

但据我了解,这不是 RESTful 概念,因为在 REST 主体中,我必须返回一个 JSON 响应,其中包含指向所有单个图像的超链接,然后客户端可以跟踪这些链接并获取图像。

因此,在这种情况下,我将对单个图像(由 URL 表示)发出服务句柄请求,并将图像作为字节数组返回。但是对于返回图像列表的服务,我有我的 REST 服务,它返回一个 URI 列表,代表第一个服务提供的单个图像。

是个好主意吗?

【问题讨论】:

【参考方案1】:

Spring Data REST

什么是 Restful 什么不是 Restful 一直在争论。一般来说,它涉及通过 URI 以特定资源为目标的无状态 HTTP 请求,并且响应通常符合 JSON。并非所有这些都是硬性规定,但这是您通常会看到的。

对上述方法的改进是 HATEOAS,即您提到的链接。

您可以通过 Spring Data REST 项目轻松生成 Restful、HATEOAS 端点。它处理了大部分痛苦的配置,让您专注于您希望公开的资源。

【讨论】:

Tnx,但是你认为我现在使用的方法可以被认为是 REST 吗?还是不行? 恕我直言,您设计的端点不符合 Rest API 的流行约定。您通常会看到它按资源组织(例如 /images、/images/id、/images?roomId=roomId 等)。这是一个需要改进的领域。 Tnx,我会考虑改进我的服务

以上是关于如何正确实现使用 Spring MVC\Boot 返回图像列表的 REST 服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 Spring Security 中的 hasRole?

如何在 Spring Boot 类之间正确注入 @Autowired?

如何使用 Spring Security / Spring MVC 处理表单登录

怎么使用使用 Spring Social 连接社交网络

如何在 Spring 中为 GraphQL 实现异常处理程序

使用 Spring Data 中的 CassandraRepository 为 Cassandra 实现分页的正确方法