eg:
package com.qizekj.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author chenqun* @date 2023/3/18 19:12*/
@Controller
@RequestMapping("/user")
public class UserController {/*** /add UserController.add OrderController.add?* 如果我们将@RequestMapping注解加在我们的类上面 是访问该接口前缀* 如果加在方法上就是我们具体的访问路径* /user/add* @return*/@RequestMapping("/add")@ResponseBodypublic String add() {return "user add ok";}@RequestMapping("/delete")@ResponseBodypublic String delete() {return "user delete ok";}@RequestMapping("/select")@ResponseBodypublic String select() {return "user select ok";}
}
package com.qizekj.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author chenqun* @date 2023/3/18 19:13*/
@Controller
@RequestMapping("/order")
public class OrderController {@RequestMapping("/add")@ResponseBodypublic String add() {return "order add ok";}@RequestMapping("/delete")@ResponseBodypublic String delete() {return "order delete ok";}@RequestMapping("/select")@ResponseBodypublic String select() {return "order select ok";}
}
eg:
package com.qizekj.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author chenqun* @date 2023/3/18 19:26*/
@Controller
public class MemberController {/*** RequestMapping 默认的情况下 RequestMapping支持所有请求方式 例如 get、post 、delete* method = RequestMethod.POST 设定该接口支持的类型 post** @return*/@RequestMapping(value = "/addMember", method = RequestMethod.POST)@ResponseBodypublic String addMemberPost(Integer id, String name) {System.out.println("id:" + id);System.out.println("name:" + name);return "post---ok";}/*** addMember* * RequestMapping 默认的情况下 RequestMapping支持所有请求方式 例如 get、post 、delete* method = RequestMethod.POST 设定该接口支持的类型 post** @return*/@RequestMapping(value = "/addMember", method = RequestMethod.GET)@ResponseBodypublic String addMemberGet(Integer id, String name) {System.out.println("id:" + id);System.out.println("name:" + name);return "get---ok";}
}
参数:
required:是否为必传参数;
defaultValue:参数默认值。
//springmvc5种接受参数类型
//1.1、普通参数
@RequestMapping("/demo01")
@ResponseBody
public String demo01(String name, Integer age) {return "name:" + name + ",age:" + age;
}//1.2、普通参数2
/*** 当访问时的传递参数名称name与方法形参名称qizekjName不一致时,可以用@RequestParam注解进项绑定* 1.@RequestParam("name")地址栏 传递参数名称name 方法形参名称qizekjName* 2.required:是否必须传递该参数,默认是为true,也就是需要传递该参数;required = false,不需要必须传递该参数*/
@RequestMapping("/demo02")
@ResponseBody
public String demo02(@RequestParam(name = "name", required = false) String qizekjName,@RequestParam(name = "age", required = false) Integer qizekjAge) {return "name:" + qizekjName + ",age:" + qizekjAge;
}
/*** 2、接收对象类型参数* 地址栏中传递的参数名称与对象中成员属性名称保持一致即可* @param qizekjUser* @return*/
@RequestMapping("/demo03")
@ResponseBody
public String demo03(QizekjUserEntity qizekjUser) throws UnsupportedEncodingException {return "name:" + qizekjUser.getUserName() + ",age:" + qizekjUser.getAge() + ",addres:" +qizekjUser.getQizekjUserInfo().getAddres();
}
package com.qizekj.entity;/*** @author chenqun* @date 2023/3/18 19:37*/
public class QizekjUserEntity {/*** ?userName=qizekj&age=4*/private String userName;private Integer age;/*** ?qizekjUserInfo.addres=AnHuiHeFei*/private QizekjUserInfoEntity qizekjUserInfo;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public QizekjUserInfoEntity getQizekjUserInfo() {return qizekjUserInfo;}public void setQizekjUserInfo(QizekjUserInfoEntity qizekjUserInfo) {this.qizekjUserInfo = qizekjUserInfo;}
}
package com.qizekj.entity;/*** @author chenqun* @date 2023/3/18 19:39*/
public class QizekjUserInfoEntity {private String addres;public String getAddres() {return addres;}public void setAddres(String addres) {this.addres = addres;}
}
请求参数名与形参属性名相同且请求参数为多个,定义数组类型形参即可接收参数。
http://localhost:8081/demo04?arrays=qizekj&arrays=chenqun
/*** 3、接收数组类型参数* demo04?arrays=qizekj&arrays=chenqun* 请求参数名与形参属性名相同且请求参数为多个,定义数组类型形参即可接收参数* @param arrays* @return*/
@RequestMapping("/demo04")
@ResponseBody
public String demo04(String[] arrays) {return Arrays.toString(arrays);
}
请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系。
http://localhost:85/demo05?arrays=1&arrays=2
@RequestParam :同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
eg:
/*** 4、接收集合普通类型参数* 请求参数名与形参属性名相同且请求参数为多个,定义数组类型形参即可接收参数* @param arrays* @return*/
@RequestMapping("/demo05")
@ResponseBody
public String demo05(@RequestParam List arrays) {return Arrays.toString(arrays.toArray());
}
package com.qizekj.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;/*** @author chenqun* @date 2023/3/18 13:07*/
@Configuration
@ComponentScan("com.qizekj.controller")
@EnableWebMvc
public class SpringMVCConfig {/*** 1.@Configuration 定义SpringMVCConfig.xml配置文件* 2.需要将我们的控制类注入到ioc容器 @ComponentScan("com.qizekj.springmvc")* @ComponentScan("com.qizekj.springmvc")将该包下所有的类 注入到IOC容器种* 3.在springmvc原理 所有请求过来先达到DispatcherServlet 分发具体控制类 方法执行*/
}
com.fasterxml.jackson.core jackson-databind 2.9.0
/*** 5、接收json数据(以实体类方式)* {* "userName":"qizhekj",* "age":/4* }* @return*/@RequestMapping("/demo06")@ResponseBodypublic String demo06(@RequestBody QizekjUserEntity qizekjUserEntity) {return qizekjUserEntity.toString();}
使用postman访问接口:
{"userName":"qizekj","age":4,"qizekjUserInfo":{"addres":"HeFei"}
}
/*** 6、接收json数据(以Map方式接收)* @param paramMap* @return*/
@RequestMapping("/demo07")
@ResponseBody
public String demo07(@RequestBody Map paramMap) {return paramMap.toString();
}
用postman访问:
/*** 7、接收json数据(以List集合方式接收),以json数组的形式传递数据* @param list* @return*/
@RequestMapping("/demo8")
@ResponseBody
public String demo8(@RequestBody List list) {return list.toArray().toString();
}/*** 8、接收json数据(以List集合方式接收),以json对象的形式传递数据* @param list* @return*/
@RequestMapping("/demo9")
@ResponseBody
public String demo9(@RequestBody List list) {return list.toArray().toString();
}
["qizekj","4"
]
[{"userName": "qizekj","age": "4"},{"userName": "chenqun","age": "32"}
]
@RestController
public class QizekjRestController {}
@Controller
@ResponseBody
springmvc底层基于Servlet实现的。
获取httprequest/response三种方式:
eg:
/*** 获取到我们的 HttpServletRequest httpServletRequest** @param id* @param name* @param httpServletRequest* @return*/@RequestMapping(value = "/httprequestDemo01", method = RequestMethod.GET)@ResponseBodypublic String httprequestDemo01(Integer id, String name, HttpServletRequest httpServletRequest) {System.out.println("id:" + id);System.out.println("name:" + name);String reqId = httpServletRequest.getParameter("id");String reqName = httpServletRequest.getParameter("name");System.out.println("reqId:" + reqId);System.out.println("reqName:" + reqName);/*** 2.HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();*/// 从ThreadLocal获取HttpServletRequest springmvc 底层基于Servlet 提前缓存好了ttpServletRequestHttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();return "ok---get";}/*** 获取到我们的 HttpServletRequest httpServletRequest** @param id* @param name* @return*/@RequestMapping(value = "/httprequestDemo02", method = RequestMethod.GET)@ResponseBodypublic String httprequestDemo02(Integer id, String name) {System.out.println("id:" + id);System.out.println("name:" + name);/*** 2.HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();*/// 从ThreadLocal获取HttpServletRequest springmvc 底层基于Servlet 提前缓存好了ttpServletRequestHttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String reqId = request.getParameter("id");String reqName = request.getParameter("name");System.out.println("reqId:" + reqId);System.out.println("reqName:" + reqName);return "ok---get";}
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格规范。基于这个风格设计的软件可以更简洁,更有层次。
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
传统方式操作资源:通过不同的参数来实现不同的效果,post 和 get。
http://127.0.0.1/qizekj/getUser?id=1 查询,GET,查询用户id为1信息
http://127.0.0.1/qizekj/saveUser 新增,POST
http://127.0.0.1/qizekj/updateUser 更新,POST
http://127.0.0.1/qizekj/deleteUser?id=1 删除,GET ,删除用户id为1信息
(查询、删除)一般用GET,写操作(新增、修改)一般用POST
使用RESTful操作资源:可以通过不同的请求方式来实现不同的效果。
例如:请求地址一样,但是实现的效果不一样。例如
发送请求GET执行查询、 发送POST 执行新增、发送PUT执行更新、发送DELETE 执行删除
http://127.0.0.1/user/1 查询,GET
http://127.0.0.1/user 新增数据,POST
http://127.0.0.1/user 更新,PUT
http://127.0.0.1/user/1 删除,DELETE
根据发送不同的类型(GET 、POST 、PUT、DELETE等),判断访问不同的接口。
在@RequestMapping的value中使用URI template({变量名}),然后在@RequestMapping注解方法的需要绑定的参数前,使用@PathVariable指定变量名(如果变量名和参数名一致也可以不指定),从而将URL中的值绑定到参数上。
@RequestMapping组合注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
package com.qizekj.controller;import com.qizekj.entity.QizekjUserEntity;
import org.springframework.web.bind.annotation.*;/*** @author chenqun* @date 2023/3/18 22:13*/
@RestController
public class QizekjRestfulController {//Restful api 请求地址都是一样 根据不同请求方法判断/*** 1、提供根据id查询接口 ---请求方法类型为get,指定请求类型为get* /user/{id} /user/1*/
// @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)@GetMapping(value = "/user/{id}")public QizekjUserEntity getUser(@PathVariable("id") Integer id) {System.out.println("[getUser] id:" + id);return new QizekjUserEntity("qizekj" + id, 22);}/***2、根据id删除数据 发送请求类型 delete* @param id* @return*/
// @RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)@DeleteMapping(value = "/user/{id}")public String deleteUser(@PathVariable("id") Integer id) {System.out.println("[deleteUser] id:" + id);return "ok:id" + id;}/*** 3、新增添加数据 Post类型 传递 json数据* @return*/
// @RequestMapping(value = "/user", method = RequestMethod.POST)@PostMapping(value = "/user")public String addUser(@RequestBody QizekjUserEntity qizekjUserEntity) {System.out.println("[addUser] qizekjUserEntity:" + qizekjUserEntity);return "ok";}/*** 4、修改数据 put类型 传递 json数据* @return*/
// @RequestMapping(value = "/user", method = {RequestMethod.PUT})@PutMapping(value = "/user")public String updateUser(@RequestBody QizekjUserEntity qizekjUserEntity) {System.out.println("[updateUser] qizekjUserEntity:" + qizekjUserEntity);return "ok";}/*** @RequestMapping 没有指定请求方法 则 包含所有请求类型 get、put、post等 指定请求方法类型 method = RequestMethod.PUT*/
}
上一篇: 开学日记500字