最近一直在学习框架,好久没有更新博客了,记录一下Spring
MVC学习过程中,比较新奇的地方,当前还有很多其他很厉害的东西,需要一起探讨的可以私聊我呀
REST(开发风格)
REST是一种开发风格,遵从此风格开发软件,符合REST风格,则RESTFUL
使用REST这种方式的优点是:
1.看URL就知道要什么
2. 看Http method就知道干什么
两个核心要求
1.每个资源都有唯一的标识(URL)
访问标识:http://localhost:8080/xxx/users 资源:所有用户
访问标识:http://localhost:8080/xxx/users/1 资源:用户1
访问标识:http://localhost:8080/xxx/users/1/orders 资源:用户1的所有订单
-
不同的行为,使用对应的http-mothod
1.GET方式 用来查询所有用户 @GetMapping("/users") 必须满足访问方式是GET并且路径名相同 2.POST方法 用来增加一个用户 @PostMapping(value = "/users",params = "text/html;charset=utf-8") 必须满足访问方式是POST并且路径名相同 3.PUT方式 用来修改一个用户 @PutMapping("/users") 必须满足访问方式是PUT并且路径名相同 4.DELETE方式 用来删除一个用户 @DeleteMapping(value = "/users/{id}",produces ="text/html;charset=utf-8") //防止中文乱码 必须满足访问方式是DELETE并且路径名相同 * 查询所有用户 查询id=xx 的某一个用户 @GetMapping("/users")
- 通过id获取某一个 @GetMapping("/users/{id}")
- 删除id=xx的某一个用户 @DeleteMapping(value = “/users/{id}”) //防止中文乱码
- 增加某一个用户 @PostMapping(value = “/users”,params = “text/html;charset=utf-8”)
- 修改某一个用户 @PutMapping("/users")
@RestController
public class MyRestController {
@GetMapping("/users")
public List<User> queryUsers(){
System.out.println("queryUsers with get");
User user1 = new User(1, "raoyangjun", true, new Date());
User user2 = new User(2, "lisi", false, new Date());
return Arrays.asList(user1,user2);
}
@GetMapping("/users/{id}")
public User queryUser(@PathVariable("id") Integer id){
System.out.println("query one with get by"+id);
return new User(2, "lisi", false, new Date());
}
@DeleteMapping(value = "/users/{id}",produces ="text/html;charset=utf-8") //防止中文乱码
public String deleteUser(@PathVariable Integer id){
System.out.println("delete one with delete by"+id);
return "已删除";
}
@PostMapping(value = "/users",params = "text/html;charset=utf-8")
public String insertUser(@RequestBody User user){
System.out.println("insert one user"+user);
return "添加成功";
}
@PutMapping("/users")
public String updateUser(@RequestBody User user){
System.out.println("update user with put"+user);
return "ok";
}
}
Ajax跨域的解决
1.域:协议+IP+端口。三个部分有任意一个地方不同,则是不同的域。
例如:
1.http://localhost:8080
2.https://www.baidu.com:80
Ajax跨域存在的问题
Ajax发送的请求时,不允许跨域,以防止用户信息泄露
当Ajax跨域请求时,响应会被浏览器拦截(同源策略:可以发送到不同的域,但是回送的数据会被拦截),并报错。既浏览器默认不允许ajax跨域得到响应内容
同源策略:可以发送到不同的域,但是回送的数据会被拦截
发送地址的服务器可以收到请求,但是回送的数据会被同源策略给拦截
互相信任的域之间如果需要ajax访问,(比如前后端分离的项目中,前端项目和后端项目之间)则需要额外的设置才可以正常请求
springMVC解决方案
允许其他域访问
在 被访问方 的Controller类上,添加注解@CrossOrigin(“http://localhost:8888”)
@CrossOrigin("http://localhost:8888") //:允许此域请求访问
@Controller
public class OriginController{
.....
}
跨域携带对方cookie,是session正常获取数据
在 访问方 ajax中添加属性 :withCredentials:true
$.ajax({
type:"post",
url:"http://localhost:8989/web/sys/login",
....
xhrFields:{
//跨域携带cookie
withCredentials:true
},
....
});