RESTful 风格
后端不返回视图 只返回一段数据 json格式 或者xml 的数据
@GetMapping("/js")
@ResponseBody
public String ajaxjs(){
return "{\"message\":\"helloworld\"}";
}
html 编写ajax 异步获取json 数据
<html>
<head>
<meta charset="utf-8">
<script src="jquery-3.4.1.min.js"></script>
<script>
$(function () {
$("#btn").click(function () {
$.ajax({
url:"/um/js",
type: "get",
dataType: "json",
success: function (json) {
$("#message").text(json.message);
}
})
})
})
</script>
</head>
<body>
<input type="button" id="btn" value="发起get请求">
<h1 id="message"></h1>
</body>
</html>
返回数据
比如访问 /re/6 6作为参数传入
@RestController
public class RequestController {
// /re/1
@PostMapping("/re/{rid}")
public String a(@PathVariable("rid") int id){
return "\"{\"message\":\"数据创建成功\",\"id\":"+id+"}";
}
}
json序列化
导包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
直接返回对象 浏览器 会直接用json格式输出
@GetMapping("user")
public User getUser(int id) {
User u = new User();
if (id == 1) {
u.setName("lovelves");
u.setCourse("ddheheh");
} else {
u.setName("helelo");
u.setCourse("hehehe");
}
return u;
}
还可以返回list 数据json化
@GetMapping("users")
public List<User> getUsers(){
ArrayList users = new ArrayList<>();
User a = new User();
a.setName("hello");
a.setBirthday(new Date());
User b = new User();
b.setName("lovleves");
b.setBirthday(new Date());
users.add(a);
users.add(b);
return users;
}
返回日期数据的时候要在实体类中格式化 用jsonformat注解格式化
public class User {
private String name;
private String course;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthday;
private List<Integer> purpose;
private Card card = new Card();
返回效果
接受跨域请求 用CrossOrigin注解 修饰在类上
@RestController
@CrossOrigin(origins = {"www.baidu.com","www.aa.com"})
public class RequestController {
跨域全局配置
在application.xml中添加
<mvc:cors>
<mvc:mapping path="/re/*" allowed-origins="www.baidu.com,www.aa.com" max-age="3600"/>
</mvc:cors>
拦截器
引入依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
拦截器
package com.lovelves.springmvc.converter;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Intercepter implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("pre");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("now");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("after");
}
}
在application.xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.lovelves.springmvc.converter.Intercepter"/>
</mvc:interceptor>
</mvc:interceptors>
运行结果