HttpMessageConverter
报文信息转换器,可以将浏览器的请求报文转化为Java对象,也可以将Java对象转化为Responce报文。
此转化器一共提供了两个注解和两个方法
@RequsetBody
此注解作用于控制器方法参数,可以将请求报文转化为Java对象,可使用String接受浏览器的报文信息
@RequestMapping("/testRequestBody") public String testRequestBody(@RequestBody String header) { System.out.println("header: " + header); return "index"; }
RequsetEntity
此类可以实现和@RequsetBody一样的功能,只不过是用一个Java类重新包装请求报文,其中getHeader可以获取请求头信息,getBody可以获取请求体信息。
@RequestMapping("/testRequestEntity") public String testRequestEntity(RequestEntity<String> requestEntity) { System.out.println("request header: " + requestEntity.getHeaders()); System.out.println("request body" + requestEntity.getBody()); return "index"; }
@ResponseBody
此注解可以将控制器方法的方法的返回值作为响应体响应给浏览器。
@RequestMapping("/testResponseBody") @ResponseBody public String testResponseBody() { return "success"; }
如果返回值是一个对象,那必须先将对象转化为json字符串。因此我们导入一个解析json的包
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.1</version> </dependency>
再导入json包之后,springMVC会为我们自动装配一个消息转换器MappingJackson2HttpMessageConverter,此转换器可以实现自动将返回值中的Java对象转换成一个json字符串。
@RequestMapping("/testResponseUser") @ResponseBody public User testResponseUser(User user) { return user; }
最后一个方法不常用,不进行说明。
测试用axios发送Ajax请求
(使用vue)要测试Ajax请求我们需要一个a标签为其绑定一个点击事件
<a th:href="@{/testDown}">download 1.jpg</a>
设置函数并获取事件来发送Ajax请求并阻止事件的默认行为
<script type="text/javascript"> new Vue({ el:'#app', methods:{ test(event) { axios({ method:'post', url:event.target.href, params: { username: "username", password: "123456" } }).then(function (response) { alert(response.data) }) event.preventDefault(); } } }) </script>
最后在控制器接受发送的参数并返回一个响应报文即可
@RequestMapping("/testAxios") @ResponseBody public String testAxios(String username, String password) { System.out.println("username: " + username); System.out.println("password: " + password); return "My is response body"; }