springboot接受参数相关注解
1.基本介绍
2.@pathvariable 路径参数获取信息
1.代码实例
1.index.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1>基本注解</h1> <hr/> <a href="/monster/100/king" rel="external nofollow" >@pathvariable-路径变量:/monster/100/king</a> </body> </html>
2.parametercontroller.java
package com.sun.springboot.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.restcontroller; import java.util.map; /** * @author 孙显圣 * @version 1.0 */ @restcontroller public class parametercontroller { @getmapping("/monster/{id}/{name}") //接受两个路径参数 public string pathvariable(@pathvariable("id") integer id, @pathvariable("name") string name, @pathvariable map<string, string> map) { //这里的map指将所有的路径参数都放到map中 system.out.println("id:" + id + " name:" + name); for (map.entry<string, string> entry : map.entryset()) { system.out.println("key:" + entry.getkey() + " value: " + entry.getvalue()); } return "success"; //返回json给浏览器 } }
3.测试
2.细节说明
- @pathvariable(“xxx”)必须跟{xxx}相对应
- 可以将所有的路径参数放到map中 @pathvariable map<string, string> map
3.@requestheader 请求头获取信息
1.代码实例
1.index.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1>基本注解</h1> <hr/> <a href="/requestheader" rel="external nofollow" >@requestheader-获取请求头信息</a> </body> </html>
2.parametercontroller.java
package com.sun.springboot.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestheader; import org.springframework.web.bind.annotation.restcontroller; import java.util.map; /** * @author 孙显圣 * @version 1.0 */ @restcontroller public class parametercontroller { @getmapping("/requestheader") //获取请求头的信息 public string requestheader(@requestheader("host") string host, @requestheader map<string, string> header) { system.out.println("host:" + host); system.out.println(header); return "success"; } }
3.测试
2.细节说明
- 请求头的信息都是以key - value的形式存储的
- 可以通过@requestheader(“xxx”)来获取xxx对应的value
- 也可以通过@requestheader map<string, string> header将所有的key - value都封装到map中
4.@requestparameter 请求获取参数信息
1.代码实例
1.index.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1>基本注解</h1> <hr/> <a href="/hi?hobby=打篮球&hobby=踢球" rel="external nofollow" >@requestparam-请求参数</a> </body> </html>
2.parametercontroller.java
package com.sun.springboot.controller; import org.springframework.web.bind.annotation.*; import java.util.list; /** * @author 孙显圣 * @version 1.0 */ @restcontroller public class parametercontroller { @getmapping("/hi") public string hi(@requestparam(value = "name", defaultvalue = "孙显圣") string name, @requestparam("hobby") list<string> list) { system.out.println("name:" + name); system.out.println(list); return "success"; } }
3.测试
2.细节说明
- 请求参数是可以设置默认值的,使用defaultvalue属性即可
- 请求参数还可以将同名的结果封装到list中
- 请求参数也可以使用@requestparameter map<string, string> map 将所有参数封装到map中,但是如果有同名的结果只会得到第一个,因为map的key是唯一的
5.@cookievalue cookie获取值
1.代码实例
1.index.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1>基本注解</h1> <hr/> <a href="/cookie" rel="external nofollow" >@cookievalue-获取cookie的值</a> </body> </html>
2.parametercontroller.java
package com.sun.springboot.controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; /** * @author 孙显圣 * @version 1.0 */ @restcontroller public class parametercontroller { @getmapping("/cookie") //这里可以设置required = false意为不是必须存在的,如果不存在则得到的值就为null //如果后面的参数类型是cookie,则会获取cookie对象并封装到变量中 public string cookie(@cookievalue(value = "cookie_key", required = false) string cookie_value, @cookievalue(value = "username" , required = false) cookie cookie, httpservletrequest request) { //使用原生api获取cookies cookie[] cookies = request.getcookies(); for (cookie cookie1 : cookies) { system.out.println(cookie1); } system.out.println(cookie_value); system.out.println("name:" + cookie.getname() + " value: " + cookie.getvalue()); return "success"; } }
3.测试
2.细节说明
- @cookievalue可以根据后面要封装的参数的类型来获取指定的值,如果后面的类型是cookie类型则会获取一个cookie对象并封装进入,如果是string类型则会获取cookie的value来进行封装
- 还可以通过servlet原生api的request来获取所有的cookie
- @cookievalue中有属性required默认为true,意为必须存在,否则报错,如果设置为false,则如果获取不到则为null
6.@requestbody 处理json请求,post请求体获取信息
1.代码实例
1.index.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1>基本注解</h1> <hr/> <form action="/requestbody" method="post"> <input type="text" name="username"><br> <input type="text" name="password"><br> <input type="submit" value="submit"> </form> </body> </html>
2.parametercontroller.java
package com.sun.springboot.controller; import org.springframework.web.bind.annotation.*; /** * @author 孙显圣 * @version 1.0 */ @restcontroller public class parametercontroller { @postmapping("requestbody") public string getrequestbody(@requestbody string requestbody) { //获取请求体 system.out.println(requestbody); return "success"; } }
3.测试
7.@requestattribute 请求域获取信息
1.代码实例
1.requestcontroller.java
package com.sun.springboot.controller; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestattribute; import org.springframework.web.bind.annotation.responsebody; import javax.servlet.http.httpservletrequest; /** * @author 孙显圣 * @version 1.0 */ @controller public class requestcontroller { @getmapping("/login") public string login(httpservletrequest request) { //在request域中存放一些信息 request.setattribute("name", "sun"); request.setattribute("age", 13); //调用视图解析器,请求转发到/ok return "forward:/ok"; } @responsebody @getmapping("/ok") public string ok(@requestattribute(value = "name", required = false) string name) { //使用注解来获取请求域中的信息并封装到参数中 system.out.println("name: " + name); return "success"; //返回json给浏览器 } }
2.配置视图解析器 application.yml
spring: mvc: view: #配置了视图解析器 suffix: .html #后缀 prefix: / #前缀,指的是根目录
3.测试
8.@sessionattribute session域获取信息
1.代码实例
1.sessioncontroller.java
package com.sun.springboot.controller; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.responsebody; import org.springframework.web.bind.annotation.sessionattribute; import javax.servlet.http.httpservletrequest; /** * @author 孙显圣 * @version 1.0 */ @controller public class sessioncontroller { @getmapping("/login") public string login(httpservletrequest request) { //在session域中设置信息 request.getsession().setattribute("session", "session_value"); //调用视图解析器,请求转发到/ok return "forward:/ok"; } @responsebody @getmapping("/ok") public string ok(@sessionattribute(value = "session") string value) { //使用注解来获取session域中的信息并封装到参数中 system.out.println("session: " + value); return "success"; //返回json给浏览器 } }
2.配置视图解析器(同上)
3.测试
9.复杂参数
1.代码实例
1.requestcontroller.java
package com.sun.springboot.controller; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestattribute; import org.springframework.web.bind.annotation.responsebody; import javax.servlet.http.httpservletresponse; import java.util.map; /** * @author 孙显圣 * @version 1.0 */ @controller public class requestcontroller { @getmapping("/login") public string login(map<string, object> map, model model, httpservletresponse response) { //给map封装信息 map.put("user", "sun"); map.put("job", "工程师"); //model封装信息 model.addattribute("sal", 1000); //结果最后都会封装到request域中 //调用视图解析器,请求转发到/ok return "forward:/ok"; } @responsebody @getmapping("/ok") public string ok(@requestattribute("user") string user, @requestattribute("job") string job, @requestattribute("sal") integer sal) { //使用注解来获取请求域中的信息并封装到参数中 system.out.println("user:" + user + " job:" + job + " sal:" +sal); return "success"; //返回json给浏览器 } }
2.测试
2.httpservletresponse给浏览器设置cookie
1.代码实例
package com.sun.springboot.controller; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.cookievalue; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.responsebody; import javax.servlet.http.cookie; import javax.servlet.http.httpservletresponse; /** * @author 孙显圣 * @version 1.0 */ @controller public class requestcontroller { @getmapping("/login") public string login(httpservletresponse response) { cookie cookie = new cookie("cookie_name", "cookie_value"); response.addcookie(cookie); //调用视图解析器,重定向到/ok,不能使用请求转发,因为虽然响应给客户端cookie了, // 但是由于是请求转发,第二个controller得到的是最开始的请求,那时候还没有cookie return "redirect:/ok"; } @responsebody @getmapping("/ok") public string ok(@cookievalue("cookie_name") cookie cookie) { //获取cookie system.out.println("key:" + cookie.getname() + " value:" + cookie.getvalue()); return "success"; //返回json给浏览器 } }
2.测试
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论