@RequestMapping接口的映射,可以将HTTP请求映射到控制器方法上,通过这个注解使用不同的映射,就可以区分不同的控制器,其中RequestMapping中还有不同的属性,比如method,params,produces等在这里我们就不过多介绍了。
除了@RequestMapping外 Sping也提供了一些更加简洁的注解,
@GetMapping : 处理GET请求。
@PostMapping: 处理POST。
这两种简洁的也可以使用@RequestMapping注解来实现,使用属性method = RequestMethod.GET或RequestMethod.POST这两种方式可以分别代替上面的两个简洁的注解。
除此之外还有许多的、还有许多的其他简洁的注解,这里我们直介绍常用的一些注解。
@RequestParam()后端参数重命名,这个注解顾名思义也就是简单的重命名,但是这个重命名的注解中有一个属性我们需要特别注意一下, required属性(是否必传)在该注解内表示是否必传,如果必传就设置成true,否则就设置成false,如果你已经重命名了但是required设置成false此时如果不传重命名的名那么就会使该参数为空,当然重命名的名字也可以与原参数名相同:
public String func(@RequestParam(value = "name",required = false) String Name){
return Name;
}
注意虽然我们对Name(参数)重命名了但是如果我们返回参数是仍然要是用Name而非name这是因为虽然我们进行了重名名但编译器在代码中还是只认识Name只不过是客户端传递参数的时候使用重命名后的名字,后端不管前端的事,我们依旧只使用Name。
public String func(@RequestParam String Name){
return Name;
}
重命名之后的名字和原参数名相同则,参数可以省略。
@RequestBody ()传递JSON数据 我们在postman完成这个操作,JSON就是一种数据格式,这种数据格式在Spring中可以由对象进行转化,当然JSON也可以转换成对象,@RequesetBody就是可以让对象转化为JSON格式发送个前端:
public Object method7(@RequestBody Person person) {
return person.toString();
}
当然如果我们想返回一个JSON格式的内容我们必须有一个对象我们可以自己创建一个对象也可以通过前端post的body(正文)传递一个对象中的内容。
public String func(User user) throws JsonProcessingException {
return new ObjectMapper().writeValueAsString(user);
}
我们可以通过ObjectMapper类中的方法将对象转换为JSON格式。
获取URL中参数@PathVariable:如果一个URL为http://127.0.0.1:8080/132213213 我们就可以通过@PathVariable注解来获取到URL最后的这一串数字
public String func(User user) throws JsonProcessingException {
return new ObjectMapper().writeValueAsString(user);
}
我们就可以通过这样的方式取到URL中的一些内容,@PathVariable中也有一些属性其中一个与重命名的相似。
上传⽂件@RequestPart ,在这里我们在postman中以一张图片为例:
@RequestMapping("/test2")
public String getfile(@RequestPart("cat") MultipartFile file){
String originalFilename = file.getOriginalFilename();
return originalFilename;
}
同样的@RequestPart中的参数也有着和重命名的一样相同则可省略,通过这种方式我们就可以随意地取到文件中的内容。
Cookie和Session想必大家对这两者都有一定的链接,Cookie是客户端存储数据的一种机制,Session是服务器存储数据的一种机制,客户端可以通过set-cookie给客户端的cookie赋值。
获取Cookie:我们有多种方法,
1,使用HttpservletRequest
这一种方法可以说是一种万能方法,HttpservletRequest包含了前端的所有内容,其中自然也就包含了Cookies,我们可以通过这个方法获取到Cookies中的value和name。
public String getCookie(HttpServletRequest httpServletRequest){
Cookie[] cookies = httpServletRequest.getCookies();
StringBuilder stringBuilder = new StringBuilder();
if(cookies!=null){
for(Cookie cur:cookies){
stringBuilder.append("cookie信息"+cur.getName()+" " + cur.getValue()+"::::::");
}
}
return stringBuilder.toString();
}
2,使用@CookieValue注解
public String getCookie3(@CookieValue("userName") String userName ){
return "接收成功"+userName;
}
通过这种方式我们就可以访问到前端请求中deCookie,这里要注意的是@CookieValue中的这个参数,和重命名相似,只要写了这个参数就必须传这个参数,如果里面的参数与接口的参数相同那么这个参数就可以省略。
获取Session:获取Session同样也有几种方法
1,HttpServletSession:根据Cookie和Session的关系可知,我们是根据Cookie中的sessionId来却定Sesssion的因此我们在代码中也是通过这种方式来获取session的,并且我们是无法在前端直接看到session中的内容,因此我们需要在后端设置和获取session:
@RequestMapping("setSession")
public String setSession(HttpServletRequest httpServletRequest){
HttpSession session = httpServletRequest.getSession();
session.setAttribute("userName","zhangsan");
return "设置成功";
}
@RequestMapping("getSession")
public String getSession(HttpServletRequest httpServletRequest){
HttpSession session = httpServletRequest.getSession();
Object userName = session.getAttribute("userName");
return (String) userName;
}
通过上面的方法我们就可获取到Session,通过getAttribute() 就可以获取到对应的value。
2,HttpSession 这种方法与第一种全能方法相似,只不过参数中仅仅接收了Session的信息,对于其他的信息并没有接收:
public String getSession2(HttpSession httpSession){
return (String) httpSession.getAttribute("userName");
}
通过这种方式获取Session中的value结果是一样的。
获取Header
1,HttpServletRequest 通过这个万能方法就可以轻而易举的获取到Header:请提示你要输入一些你想要获得哪些Header中的内容:
比如我们想要获得User-Agent则可以进行以下操作:
public String getHeader(HttpServletRequest httpServletRequest){
String header = httpServletRequest.getHeader("User-Agent");
return header;
}
结果就为:
返回静态页面:要想进行这个操作首先要了解@ResttController和@Controller这两者之间的关系 。
通过@ResttController的底层代码 可以看到,@RestController是@Controller的一个子接口,而相较于@Controller多了一个@ResponseBody,这个注解的主要作用就是是否以数据的形式传输,如果加上了这个注解,那么返回给前端的数据就以数据的形式传输,而无法进行跳转页面也就是"返回静态页面",我们需要同时分别使用@Controller和@ResponseBody才可以传输数据。
当然我们可以选择加或者不加例如,我们随便写一个前端代码作为参考:
如果加上了@ResponseBody那么返回的就是数据:
如果我们不使用@ResponseBody仅仅使用@Controller那么将会跳转页面
这就是跳转静态页面的基本做法。
设置Content-Type :我们通过设置 produces属性的值, 设置响应的报头Content-Type
例如后端想给前端以JSON的格式传递一组数据那么就可以使用@RequestMappint中的属性来完成这一操作。
@RequestMapping(value = "/returnJson",produces = "application/json")
@ResponseBody
public String returnJson(){
return "{\"success\":true}";
}
通过这种方式就可以以JSON的形式返回数据。