zoukankan      html  css  js  c++  java
  • RestTemplate及Response文件流问题

       Spring中有很多注解,如RequestParam,PathVarible,SesstionAttribute,这些在开发是多尝试一下,可能用得到,ModelAttribute用的还挺多,可以以此为例,探究一下Springmvc中注解

    ----------------2019/10/9-----在公司使用写了两个微服务,总结一下-------

    1.文件流作为一种特殊的数据格式,不能和普通的json对象一样返回。那么返回文件流通常有两种方法A.直接返回FileSystemResource,B.使用HttpServletResponse作为输出流,向里面写入数据。两种方法各有优点,A简单,但是应为返回的是FileSystemResource,所以在方法返回前会一直占用File对象,无法在方法中进行删除文件操作。B方法稍微琐碎一点,但是可以在把文件流写入网络后,对磁盘上的文件进行操作,灵活性更强。

      同时,作为返回文件流,在异常情况下是很难返回自定义的具体错误信息的。应为返回自定义错误信息httpstatus也是200,和文件流的正确情况无法区分。所以想要具体的错误信息,一般要分离一个接口,就是查询文件的状态,当确定文件资源存在时,调用获取文件借口获取。同时使用outputStream时,就无法写入状态码。

    2.控制器异常处理。首先我们服务里自定义的异常都本是HttpStatus=200,否则我们无法返回错误信息。区分HttpStatus和我们自定义的状态码。这两个其实什么关系都没有,不应该搞混。可能HttpStatus中返回200,但是我们自定义的却返回404。设置HttpStatus可以使用ResponseEntity或者Response对象。虽然有spring中有ExceptionHandler,但是并不好用。

    3.RestTemplate的getForEntity(url,String.class,param)和postEntity(url,param,Resource.class)的方法中参数没有传过去的问题。其实看《Spring in Action》,其实还是要对参数进行二次封装。get方法使用url+param,post方法中使用MutltipartValue(针对resource情况)。

    ------------------------2020---------------

      controller中的@RequestBody中使用List<String>,Map<String,Object>可以自动转换为Json。RestTemplate中get方法不能使用Header,要使用exchange方法。

    参考博文:https://blog.csdn.net/xixingzhe2/article/details/103129081?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3

  • 相关阅读:
    做才是得到
    常用工具汇总
    迎接2017
    新年礼物
    2017
    asp.net core 日志
    板子|无向图的割点
    11/06信竞快乐模拟赛
    动态规划复习
    894D
  • 原文地址:https://www.cnblogs.com/Robin008/p/8964945.html
Copyright © 2011-2022 走看看