如何将SpringMVC HTTP消息转换器与文件上传下载及异常处理集成优化?
摘要:HttpMessageConverter(HTTP消息转换器) HTTP消息转换器主要是将请求的表单数据封装成对象,controller中的方法直接用对象接收数据。 HttpMessageConverter接口可以将请求协议转换为Java对
HttpMessageConverter(HTTP消息转换器)
HTTP消息转换器主要是将请求的表单数据封装成对象,controller中的方法直接用对象接收数据。
HttpMessageConverter接口可以将请求协议转换为Java对象,也可以把Java对象转换为响应协议。
对于程序员来说,springmvc已经帮我们写好了,我们只需要在不同的业务场景下,选择合适的HTTP消息转换器即可。
我们可以使用不同的注解来启用不同的消息转换器。
@ResponseBody
这里使用的消息转换器是:StringHttpMessageConverter
@GetMapping("/ajax")
// @ResponseBody注解表示该方法的返回值直接作为字符串响应体返回,而不是视图名称
@ResponseBody
public String ajax() {
return "hello ajax";
}
直接返回Java对象,(这里使用的消息转换器是MappingJackson2HttpMessageConverter):
@GetMapping("/ajax2")
// @ResponseBody注解表示该方法的返回值直接作为响应体返回,而不是视图名称
@ResponseBody
public User ajax2() {
return new User("zhangsan", 20, "123456");
}
此时要加入jackson-databind依赖才能生效
<!-- 负责将Java对象转换为JSON格式,或者将JSON格式的数据转换为Java对象。
它提供了丰富的功能和灵活的配置选项,使得在Java应用程序中处理JSON数据变得非常方便。-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.20.2</version>
</dependency>
</dependencies>
@RestController
标注在类上,等于@Controller+@ResponseBody
@RequestBody
作用是直接将请求体传递给Java程序,程序中可以直接使用一个String类型的变量来接收。
此注解只能出现在方法的参数上。
使用的消息转换器是FormHttpMessageConverter
@PostMapping("/ajax3")
public String ajax3(@RequestBody String params) {
System.out.println(params);
return "hello ajax3";
}
如果前端请求体当中提交的数据是JSON格式,那么@RequestBody可以将提交的json格式的字符串转换成Java对象。同样需要使用jackson的依赖
@PostMapping("/ajax4")
@ResponseBody
public String ajax4(@RequestBody User user) {
System.out.println(user);
return "hello ajax4";
}
RequestEntity类
RequestEntity类的实例封装了整个请求的协议:包括请求行、请求头、请求体的所有信息。
