当前位置:首页 » 《资源分享》 » 正文

spring web常用注解和方法传参介绍

28 人参与  2024年04月06日 16:20  分类 : 《资源分享》  评论

点击全文阅读


一. @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时使用


点击全文阅读


本文链接:http://zhangshiyu.com/post/91301.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1