如何正确实现使用 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 处理表单登录