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方法。