返回json给前端

导包:

response传回前端 responseentity前端如何接收_拦截器

controller方法直接返回对象或对象列表,要加@ResponseBody,表示以响应体的形式发送:

response传回前端 responseentity前端如何接收_封装_02

response传回前端 responseentity前端如何接收_封装_03

controller获取请求体数据

在参数前标识@RequestBody,表示把请求体以字符串的形式封装到参数中:

response传回前端 responseentity前端如何接收_response传回前端_04

post类型的表单:

response传回前端 responseentity前端如何接收_response传回前端_05

运行结果:

response传回前端 responseentity前端如何接收_java_06

注意:如果表单中有上传文件,那么文件名也会包含在这个字符串中;如果前端在请求体发送了json,controller方法参数用@RequestBody User user也可以吧json直接封装成对象。

HttpEntity

controller方法参数传一个HttpEntity<String> httpEntity,可以把所有请求信息都封装到这个参数中,包括请求头信息,请求体,url参数等。url参数要拿到,必须要是post方式。

ResponseEntity

可以用来自定义响应内容:

response传回前端 responseentity前端如何接收_封装_07

文件下载

response传回前端 responseentity前端如何接收_java_08

文件上传

导包:

前端form表单要加enctype=multipart/formdata:

response传回前端 responseentity前端如何接收_java_09

controller方法,使用MultipartFile组件来封装上传的文件: 

response传回前端 responseentity前端如何接收_拦截器_10

用到的组件要在springmvc.xml声明一下:

response传回前端 responseentity前端如何接收_response传回前端_11

上传多个文件,controller方法参数用数组接收,遍历数组要判空:

response传回前端 responseentity前端如何接收_spring_12

拦截器

定义一个拦截器实现Hander

response传回前端 responseentity前端如何接收_response传回前端_13

preHandle在controller方法执行前执行,postHandle在controller方法执行后执行,afterCompletion在整个servlet结束后执行,用于清理资源,即使前面报错也会执行。

注意:preHandle返回值必须为true才能让链执行下去,否则会卡住。

多个拦截器以链的方式执行,谁先执行取决于web.xml配置的顺序:

gpreHandle1
        preHandle2
                handle
        postHandle2
postHandle1
afterConpletion2
afterConpletion1

pre的时候顺序遍历列表,post或after的时候逆序遍历列表,

springmvc.xml声明一下,没指定路径,就是对所有请求生效:

response传回前端 responseentity前端如何接收_封装_14

Controller异常统一处理

@ExceptionHandler,value指定异常类型,当Controller抛出这个异常就会进入该方法统一处理:

response传回前端 responseentity前端如何接收_java_15

如果同时声明了大范围和小范围的ExceptionHandler,则优先匹配小范围,匹配到了小范围就不会匹配大范围:

response传回前端 responseentity前端如何接收_封装_16

在Controller类中声明的ExceptionHandler只能处理当前Controller类的,如果需要定义全局的ExceptionHandler,需要创建一个@ControllerAdvice类:

response传回前端 responseentity前端如何接收_spring_17

同样,优先匹配局部Handler,匹配到局部Handler就不会匹配全局Handler。