spring web常用注解和方法传参介绍
时间:2024-04-15 17:55:24 来源:网络cs 作者:晨起 栏目:选词工具 阅读:
一. @RestController
@RestController 该注解只能修饰类或接口,意在告诉spring帮我们管理这个类,使得我们后续的访问能成功,@RestController = @Controller + @ResponseBody;
@Controller 该注解也只能修饰类或接口,返回的是视图,如果用该注解修饰类,则该类返回的内容必须都为视图(如html页面);
@ResponseBody既可以修饰类接口也可以修饰方法,修饰类时表示该类下所有方法都返回数据,修饰方法时表示该方法返回数据。
二. 路由映射@RequestMapping
@RequestMapping
该注解可以修饰类和方法,表示访问时的url路径
三. 请求举例
1. 无参
@RequestMapping("/index1")@RestControllerpublic class HelloController { @RequestMapping("/sayHello") public String sayHello(){ return "hello"; }
在上述例子中,@RequestMapping既修饰了类也修饰了方法,因此在发起请求时要先加上修饰该类中的路径,然后再加上方法上的路径(该路径不需与方法名一致):127.0.0.1:8080/index1/sayHello;并且""中的路径可以写多层;method表示该请求只能是某个类型;如果不写method会默认任何请求都可以,同时value会自动省略,只留下"/sayHello"
2. 传递一个或多个参数
@RequestMapping("/m1") public String m1(String name, Integer age){ return "属性name = " + name + age; }
上述请求中queryString中的参数名需和方法形参名一致,表示根据方法中的形参名在请求中寻找对应名字的属性所对应的值,如果没有则返回null,但如果方法中的形参类型为基本数据类型,此时请求中没有该属性则会产生异常,因此尽量使用包装类。
3. 传递对象
class User { public String name; public int age; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; }}@RequestMapping("/m2") public String m2(User user){ return "属性user" + user.toString(); }
4. 传递数组
@RequestMapping("/m3") public String m3(String[] name){ return "属性name" + Arrays.toString(name); }
当请求中同一个参数(键)的名字重复多次,其对应的值会被封装为一个数组,或同一个键对应的值使用逗号分隔开。
5. 传递集合
@RequestMapping("/m4") public String m4(@RequestParam(required = false) List<String> list){ return "属性list" + list + ",长度" + list.size(); }
传递集合时需要加上@RequestParam注解,加上该注解后会默认参数为必传,否则要将required设置为false
6. 传递json字符串
@RequestMapping("/m2") public String m2(@RequestBody User user){ return "属性user" + user.toString(); }
需加上@RequestBody注解所传的参数要符合json的格式
7. 获取url中的参数
@RequestMapping("/m5/{userId}/{name}") public String m5(@PathVariable Integer userId, @PathVariable String name){ return "userId = " + userId + ",name = " + name; }
注解{}中的值要和方法的形参对应,并且顺序不能调换,一个 /{}/ 对应 url中的一层路径,否则会出现404。
8. 上传图片
@RequestMapping("/m6") public String m6(@RequestPart MultipartFile file) throws IOException { System.out.println(file.getOriginalFilename()); file.transferTo(new File("C:/Users/Picture/" + file.getOriginalFilename())); return "success"; }
使用@RequestPart注解,方法中的形参名要和请求中的键名一致,并且类型要选择File
9. 获取Cookie
@RequestMapping("/getCookie2") public String getCookie2(@CookieValue String name){ return "cookie中value的值" + name; }
使用@CookieValue注解,在浏览器构造一个Cookie实现
10. 获取Session
@RequestMapping("/setSession") public String setSession(HttpServletRequest request){ HttpSession session = request.getSession(); session.setAttribute("name","zhangsan"); return "success"; }@RequestMapping("/getSession2") public String getSession2(@SessionAttribute(required = false) String name){ return "session:" + name; }
先设置一个Session,使用@SessionAttribute注解获取Session
11. 获取Header
@RequestMapping("/getHeader2") public String getHeader2(@RequestHeader("User-Agent") String userAgent){ return "User-Agent" + userAgent; }}
通过@RequestHeader注解,("")中填写要获取的键
四. 响应举例
1. 返回静态页面
比如返回一个html页面
@RequestMapping("/return")@Controllerpublic class ReturnValue { @RequestMapping("/f1") public String f1(){ return "/f1.html"; }
此处该类需要用@Controller修饰,表示返回视图
2. 返回html片段
@ResponseBody@RequestMapping("/f3") public String f3(){ return "<h1>f3方法</h1>"; }
3. 返回 数组/对象/Map/Set 时 spring会自动的将返回结果的Content-Type设置为application/json,以json的方式返回,
@ResponseBody@RequestMapping("/f4") public Map<String, String> f4(){ Map<String, String> map = new HashMap<>(); map.put("A","1"); map.put("B","2"); map.put("C","3"); return map; }@ResponseBody@RequestMapping("/f7") public int[] f7(){ return new int[]{1,2,3}; }
可以使用Fiddler抓包查看响应的 Content-Type
4. 返回 json数据
@ResponseBody@RequestMapping(value = "/f6", produces = "application/json;charset=utf8") public String f6(){ return "{'Ok':1}"; }}
首先的需保证返回的数据是json格式数据,然后将produces设置为application/json同时指定字符集
五. 总结
1. @RestController:修饰类或接口,告诉spring帮我们管理这个类
2. @Controller:修饰类,表示该类返回的是视图
3. @ResponseBody:修饰类或方法,当一个类用Controller修饰时,若某个方法想返回数据,则可以用该注解修饰
1. @RequestMapping:修饰类和方法,表示访问时的url路径
2. @RequestParam:传递集合类时或修改请求中某个键的名字时需要加上,加上该注解默认required为true,即为必传属性。
3. @PathVariable:用于获取url中的参数的值,搭配RequestMapping使用,多个获取的参数顺序不能改变,一一对应关系
4. @RequestPart:上传图片信息时,需用该注解修饰
5. @CookieValue:获取Cookie时使用
6. @SessionAttribute:获取Session时使用
7. @RequestHeader:获取Header时使用
本文链接:https://www.kjpai.cn/news/2024-04-15/159113.html,文章来源:网络cs,作者:晨起,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
上一篇:前端(二十二)——前端工程化
下一篇:返回列表