使用SpringMVC框架,DispatcherServlet(核心控制器)会拦截到所有的资源,导致静态资源(img、css、js)也会被拦截,从而不能被使用。
解决方法:在springmvc.xml
配置文件配置静态资源不进行拦截。
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/images/**" location="/images/"/>
使用@RequestBody注解把json的字符串转换成JavaBean对象,需要引入jackson(或fastjson)相关依赖包,如没有引入,类型转换异常报415。
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.6version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.9.6version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.9.6version>
dependency>
回顾:RequestBody注解:获取请求体的内容,参数拼接成一个字符串
回顾:jQuery框架ajax使用
前端(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注解,响应数据为JSON格式数据
/*
@ResponseBody:方法上加上@ResponseBody注解,响应数据为JSON数据或String。
*/
@ResponseBody
@RequestMapping(value = "/outjsonresponse")
public User outJsonResponseBody(){
User user = new User();
user.setName("周哈哈");
user.setLevel(66);
return user;
}
/*
@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>Titletitle>
<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>
//扩展:后台把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注解相当于@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;
}
}