跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 工具系统 > 选词工具 > spring web常用注解和方法传参介绍

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,作者:晨起,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论