@GetMapping注解
用get请求访问:
@GetMapping("/index4") //只能通过get方式访问
public String getIndex4(){
logger.error("我是index.html");
return "/index.html";
}
当我们在Postman中用post请求url时,就会出现405,无法访问到url。
@PostMaapping注解
@PostMapping("/index5")
public String getIndex5(){
logger.error("我是index.html");
return "/index.html";
}
启动Spring后,浏览无法进行post请求
@Responsebody方法注解
方法返回字符串而不返回视图
1.返回自定义Java对象
@RequestMapping("/index6")
@ResponseBody //返回自定义类型而非视图
public String getIndex6(){
return "/index.html";
}
请求后的结果:
2.返回Json字符串对象
原始方法:
@RequestMapping("/index7")
@ResponseBody
public String getIndex7() throws JsonProcessingException {
User user = new User();
user.setUsername("trq");
user.setPassword("hello");
//将对象转换成Json字符串
String result = objectMapper.writeValueAsString(user);
log.error(result);
return result;
}
请求后的结果:
2.利用Spring技术:
@RequestMapping("/index8")
@ResponseBody
//利用Spring技术直接转换成了Json对象,非常方便
public User getIndex8(){
User user = new User();
user.setUsername("trq");
user.setPassword("hello");
return user;
}
@Responsebody类注解
返回后端接口信息,而非视图
参数注解:
@PathVariable
一般的URL服务路径都时固定的,SpringMVC提供了restful风格可以变化的URL,示例:
@RestController
@RequestMapping("/method")
public class MethodController {
@GetMapping("/people/{pid}/animal/{aid}")
public String method(@PathVariable String pid,
@PathVariable("aid") String animalId){
return "用户id: "+pid+",动物id: "+animalId;
}
}
上述代码中,people是固定形式,{pid}则是动态变化的,看作一个变量,animal和aid同理,当我们想在方法中自定义参数时,可以在@PathVariable注解后面添加原来的“aid”;在浏览器中访问动态url
动态url优点:url语义很明确,seo(搜索引擎)获取的权限更高一些
@RequestMapping("/getname")
public String method2(String name){
return "姓名:"+name;
}
url中手动传参访问:
@RequestBody注解
@RequestMapping("/login")
public String method3(@RequestBody String name, @RequestBody String password){
return "姓名:"+name+", 密码:"+password;
}
当@RequestBody(required = false)时表明该参数可有可无;当required = true时表明必须传入该参数;默认情况下没有设置required时必须传参
这种方式参数需要从request的body中获取,当我们不传参数时访问url,结果显示request的body不存在,因而出现问题
当我们补全参数时时,依然还不能访问,结果依然显示request的body不存在
实际上,这时候我们通过Postman工具在body中设置两个参数,然后通过post方法模拟url请求才会出现结果;此外利用get方法时,也能得到结果,这是因为我们用在request的body中设置参数,利用get方法模拟了post方法。
下面这段代码效果与方法注解@GetMapping是一样的!
@RequestMapping(value = "/index9", method = RequestMethod.GET)
public String getIndex9(){
return "/index.html";
}
@RequestParam与@RequestBody区别:
与RequestBody不同的是,使用RequestParam后,可以直接在浏览器中传入参数访问,而RequestBody只能使用Postman在request的body中传参访问。此外,RequestParam也可以指定required,为true时必须传参,为false传不传都行。
@RequestMapping("/reg")
public String method4(@RequestParam String name, @RequestParam String password){
return "姓名:"+name+", 密码:"+password;
}
在方法中可以直接传入一个对象,返回对象的每个属性,这样就避免传入了多个形参。
@RequestMapping("/reg3")
public String method6(User user){
return "username:"+user.getUsername()+
", password:"+user.getPassword()+
", img:"+user.getImg();
}
当我们在浏览中不传参时,也是能访问的,返回的属性值都为null
当后端为@RequestBody加自定义对象形式:
传参时必须在request的body中传,此外需要注意的是,不能采用form表单提交的方式了,这时候需要采用Json字符串对象格式。
举例:
小小的练习
使用PostMan和自定义的User对象完成登录功能,当用户名和密码都等于root时登录成功,否则登录失败,登录成功之后将登录的用户信息存储到Session中。
前端核心部分:
利用jQuery框架,getJson()是专门为ajax获取json数据而设置的,支持跨域调用,基本用法:getJson(url,[data],[callback])
- url:String类型,表示发送的请求地址,也可以称为后端路由地址
- data:可选参数,为前端待发送的key/value参数,表示前端向后端发送的参数,同get/post类型的data
- callback:回调函数
后端代码:
浏览器中访问login.html,并输入正确的用户名和密码,看一下后端相应给前端的情况:
前端请求的url:http://localhost:8080/user/login3username=trq&password=0627
后端响应结果:
查看Cookies:里面保存了后端设置的sessionid