加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何创建指向返回void的Spring控制器操作的链接

发布时间:2020-12-15 01:24:42 所属栏目:大数据 来源:网络整理
导读:我正在使用spring mvc,hateoas.我有一个看起来像的控制器动作 @RequestMapping(value = "/images/{userId}/{publicUrl}/{fileName:.+}",method = RequestMethod.GET)public void image(@PathVariable Integer userId,@PathVariable String publicUrl,@PathVa

我正在使用spring mvc,hateoas.我有一个看起来像的控制器动作

@RequestMapping(value = "/images/{userId}/{publicUrl}/{fileName:.+}",method = RequestMethod.GET)
public void image(@PathVariable Integer userId,@PathVariable String publicUrl,@PathVariable String fileName,HttpServletRequest request,HttpServletResponse response) throws Exception {
    try(HellodoxAws aws = haws;){
        .....
        .....
        response.setContentType(image.getObjectMetadata().getContentType());
        response.setHeader("ETag",image.getObjectMetadata().getETag());
        response.setHeader("Cache-Control",image.getObjectMetadata().getCacheControl());
        response.setHeader("Last-Modified",image.getObjectMetadata().getLastModified().toString());
        IOUtils.copy(image.getObjectContent(),response.getOutputStream());
    }catch (Exception e) {
        if(e instanceof AmazonS3Exception){
            int statusCode = ((AmazonS3Exception) e).getStatusCode();
            //System.out.println("Status Code : "+statusCode);
            response.setContentType("image/jpeg");
            if(statusCode==HttpStatus.NOT_MODIFIED.value()){
                response.setHeader("ETag",((AmazonS3Exception) e).getAdditionalDetails().get("ETag"));
                response.setHeader("Cache-Control",((AmazonS3Exception) e).getAdditionalDetails().get("Cache-Control"));
                response.setHeader("Last-Modified",((AmazonS3Exception) e).getAdditionalDetails().get("Last-Modified"));
            }
            response.setStatus(statusCode);
        }
    }
}

这个动作完美无缺.

现在我想要的是发布url来访问每个配置文件的图像. JSON格式是这样的

{
    "profileId" : 342308,"userId" : 342308,"firstname" : "Henry","lastname" : "SEOl","title" : "Mr.","largeImageUrl" : "https://

我想添加该链接来代替“largeImageUrl”和“thumbImageUrl”的值.

如果我使用hateoas的linkTo函数,它说控制器的相应方法不应该返回void.

如何创建这种动态链接并将其添加到资源?

最佳答案
你可以使用

public static ControllerLinkBuilder linkTo(Class

所以应该是这样的

Link link = linkTo(
  ImageController.class,ImageController.class
    .getMethod("image",Integer.class,String.class,HttpServletRequest.class,HttpServletResponse.class),1,"url","file"
).withRel("image");

注意 :
有一个较短的方法

public static ControllerLinkBuilder linkTo(Method method,Object... parameters) {

但它有一个bug,因此它不起作用

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读