文章目录
设置静态资源过滤
使用SpringMVC框架,DispatcherServlet(核心控制器)会拦截到所有的资源,导致静态资源(img、css、js)也会被拦截,从而不能被使用。
解决方法:在springmvc.xml
配置文件配置静态资源不进行拦截。
<!--
设置静态资源不进行拦截
mapping:用户请求的路径
location="":带有上面请求路径的请求,直接到指定目录下找对应的文件
-->
<mvc:resources mapping="/js/**" location="/js/" />
<!--<!–如访问http://localhost:8080/images/0.jpg 不进行如下配置,则报404–>-->
<mvc:resources mapping="/images/**" location="/images/"/>
<!--扩展:对进入DispatcherServlet的URL进行筛查
如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,
如果不是静态资源的请求,才由DispatcherServlet(SpringMVC的核心控制器)继续处理。-->
<!--<mvc:default-servlet-handler />-->
JSON数据处理
使用@RequestBody注解把json的字符串转换成JavaBean对象,需要引入jackson(或fastjson)相关依赖包,如没有引入,类型转换异常报415。
<!--用于JSON数据转换-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
使用@RequestBody注解,前台传的json的字符串在后台转换成JavaBean的对象
回顾:RequestBody注解:获取请求体的内容,参数拼接成一个字符串
前端(POST方式)传入一个JSON数据,后台会将JSON数据转成JavaBean
@Controller
@RequestMapping(value = "/json")
public class JsonHandlerController {
/*使用@RequestBody注解把 前台传的json的字符串 在后台转换成JavaBean的对象
@RequestBody:如果使用@RequestBody接收数据转成 JavaBean,客户端提交数据必须为 JSON格式 注意:提交方式要是POST
@RequestBody接收整个提交内容体,并转换成JavaBean对象
*/
@RequestMapping(value = "/add")
public void add(@RequestBody User user){
System.out.println(user);
}
}
使用@ResponseBody注解,在后台把JavaBean对象转换成json字符串,直接响应
方法上加上@ResponseBody注解,响应数据为JSON格式数据
/*
@ResponseBody:方法上加上@ResponseBody注解,响应数据为JSON数据或String。
*/
@ResponseBody
@RequestMapping(value = "/outjsonresponse")
public User outJsonResponseBody(){
User user = new User();
user.setName("周哈哈");
user.setLevel(66);
return user;
}
@RequestBody注解与@ResponseBody注解结合使用
/*
@RequestBody:如果使用@RequestBody接收数据转成 JavaBean,客户端提交数据必须为 JSON格式 注意:提交方式要是POST
@ResponseBody:方法上加上@ResponseBody注解,响应数据JSON数据。
*/
@ResponseBody
@RequestMapping(value = "/bean")
public User addBean(@RequestBody User user){
System.out.println(user);
return user;
}
前端
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="/js/jquery-2.2.3.min.js"></script>
</head>
<body>
<button type="button" id="btn">提交JSON数据</button>
<script>
$('#btn').click(function () {
//AJAX请求方式,向后台发送JSON格式数据
$.ajax({
url:'/json/bean',
type:'POST',
data:'{"name":"admin","level":123}',
dataType: "json",
contentType:'application/json;charset=utf-8',
success:function (data) {
console.log(data);
}
});
});
</script>
</body>
</html>
客户端提交数据
后台响应数据
扩展:ResponseEntity把JavaBean对象转换成json字符串,直接响应
//扩展:后台把JavaBean对象转换成json字符串,直接响应
@RequestMapping(value = "/demo")
public ResponseEntity<User> outJson(){
User user = new User();
user.setName("周哈哈");
user.setLevel(66);
//第1个参数:需要响应的数据
//第2个参数:响应的状态
return new ResponseEntity<User>(user, HttpStatus.OK);
}
扩展: @RestController把JavaBean对象转换成json字符串,直接响应
/*
扩展:@RestController注解相当于@Controller @ResponseBody,
可以后台把JavaBean对象转换成json字符串,直接响应
*/
@RestController //相当于写了 @Controller @ResponseBody
@RequestMapping(value = "/restController/json")
public class JsonHandlerRestController {
//后台把JavaBean对象转换成json字符串,直接响应
@RequestMapping(value = "/demo")
public User outJson(){
User address = new User();
address.setName("张三三");
address.setLevel(20);
return address;
}
}