Spring 数据 REST 内容协商
Spring data REST content negotiation
我有一个带注释的 RepositoryRestResource
域 objects,其字段也包含二进制数据(图像)。Spring Rest machinery 将为这些创建很好的 RESTful 链接字段,但我还想介绍一个处理程序,当浏览器发送 "image/*" 接受 header.
时,returns 是裸二进制文件
我可以在相同的路径上覆盖一个控制器,但它很脆弱,我宁愿为此编写一个策略 class。
可能吗?知道将它插入 Spring 管道的什么位置吗?
TIA,
爱德华多
使用@RepositoryRestController 注释"properly",您应该能够将控制器覆盖限制为仅"image/*"。
假设您有一个简单的域对象模型(getters/setters 并省略了一些注释...)
public class Item {
@Id
private String id;
private String name;
}
让我们只为 image/* 覆盖控制器
@RepositoryRestController
@ResponseBody
public class ItemRepositoryRestController {
@Autowired
private ItemRepository repository;
@RequestMapping(value = "/items/{id}", method = RequestMethod.GET,
produces = "image/*")
public Item getItem(@PathVariable(value = "id") String id)
{
Item item = repository.findOne(id);
/* do some magic with your item */
return item;
}
显然,这里没有 image/* 数据 returned - 你实际上会得到一个 400 错误 - 但你只有在询问时才能到达这个控制器如果接受 image/*,同时通过自动 Spring Rest Controller 当不要求 image/* 当且仅当你使用@RequestMapping at the method level.
我还没有达到 return 原始二进制数据的地步,您可能必须直接使用 HttpServletResponse,如图 所示。或者您可能已经有了答案,因为在您的评论中您提到已经添加了另一个资源路径(在这种情况下,我对您如何 return 原始数据感兴趣)。
我有一个带注释的 RepositoryRestResource
域 objects,其字段也包含二进制数据(图像)。Spring Rest machinery 将为这些创建很好的 RESTful 链接字段,但我还想介绍一个处理程序,当浏览器发送 "image/*" 接受 header.
我可以在相同的路径上覆盖一个控制器,但它很脆弱,我宁愿为此编写一个策略 class。
可能吗?知道将它插入 Spring 管道的什么位置吗?
TIA, 爱德华多
使用@RepositoryRestController 注释"properly",您应该能够将控制器覆盖限制为仅"image/*"。
假设您有一个简单的域对象模型(getters/setters 并省略了一些注释...)
public class Item {
@Id
private String id;
private String name;
}
让我们只为 image/* 覆盖控制器
@RepositoryRestController
@ResponseBody
public class ItemRepositoryRestController {
@Autowired
private ItemRepository repository;
@RequestMapping(value = "/items/{id}", method = RequestMethod.GET,
produces = "image/*")
public Item getItem(@PathVariable(value = "id") String id)
{
Item item = repository.findOne(id);
/* do some magic with your item */
return item;
}
显然,这里没有 image/* 数据 returned - 你实际上会得到一个 400 错误 - 但你只有在询问时才能到达这个控制器如果接受 image/*,同时通过自动 Spring Rest Controller 当不要求 image/* 当且仅当你使用@RequestMapping at the method level.
我还没有达到 return 原始二进制数据的地步,您可能必须直接使用 HttpServletResponse,如图