• JavaWeb开发-05-SpringBootWeb请求响应


     

    一.请求

    1.Postman


    2.简单参数

    1. package com.wjh.controller;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. import javax.servlet.http.HttpServletRequest;
    5. /*
    6. * 测试请求参数接受
    7. */
    8. @RestController
    9. public class RequestController {
    10. // //原始方式
    11. // @RequestMapping ("/simpleParam")
    12. // public String simpleParam(HttpServletRequest request){
    13. // //获取请求参数
    14. // String name = request.getParameter("name");
    15. // String ageStr = request.getParameter("age");
    16. //
    17. // int age = Integer.parseInt(ageStr);
    18. // System.out.println(name + ":" + age + ":");
    19. //
    20. // return "OK!";
    21. // }
    22. //springboot 方式
    23. @RequestMapping ("/simpleParam")
    24. public String simpleParam( String name,Integer age){
    25. System.out.println(name + ":" + age + ":");
    26. return "OK!";
    27. }
    28. }

     

     

     GET请求:

     

     

     POST请求:

     

     

     

    1. package com.wjh.controller;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RequestParam;
    4. import org.springframework.web.bind.annotation.RestController;
    5. import javax.servlet.http.HttpServletRequest;
    6. /*
    7. * 测试请求参数接受
    8. */
    9. @RestController
    10. public class RequestController {
    11. // //原始方式
    12. // @RequestMapping ("/simpleParam")
    13. // public String simpleParam(HttpServletRequest request){
    14. // //获取请求参数
    15. // String name = request.getParameter("name");
    16. // String ageStr = request.getParameter("age");
    17. //
    18. // int age = Integer.parseInt(ageStr);
    19. // System.out.println(name + ":" + age + ":");
    20. //
    21. // return "OK!";
    22. // }
    23. //springboot 方式
    24. // @RequestMapping ("/simpleParam")
    25. // public String simpleParam( String name,Integer age){
    26. // System.out.println(name + ":" + age + ":");
    27. // return "OK!";
    28. // }
    29. @RequestMapping ("/simpleParam")
    30. public String simpleParam(@RequestParam(name = "name") String username, Integer age){
    31. System.out.println(username + ":" + age + ":");
    32. return "OK!";
    33. }
    34. }

     

     

     

    3.实体参数

     创建一个User类:

    1. package com.wjh.pojo;
    2. public class User {
    3. private String name;
    4. private Integer age;
    5. public String getName() {
    6. return name;
    7. }
    8. public void setName(String name) {
    9. this.name = name;
    10. }
    11. public Integer getAge() {
    12. return age;
    13. }
    14. public void setAge(Integer age) {
    15. this.age = age;
    16. }
    17. @Override
    18. public String toString() {
    19. return "User{" +
    20. "name='" + name + '\'' +
    21. ", age=" + age +
    22. '}';
    23. }
    24. }

     

    创建一个Address类

    1. package com.wjh.pojo;
    2. public class Address {
    3. private String province; //省
    4. private String city; //市
    5. public String getProvince() {
    6. return province;
    7. }
    8. public void setProvince(String province) {
    9. this.province = province;
    10. }
    11. public String getCity() {
    12. return city;
    13. }
    14. public void setCity(String city) {
    15. this.city = city;
    16. }
    17. @Override
    18. public String toString() {
    19. return "Address{" +
    20. "province='" + province + '\'' +
    21. ", city='" + city + '\'' +
    22. '}';
    23. }
    24. }

    1. package com.wjh.controller;
    2. import com.wjh.pojo.User;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RequestParam;
    5. import org.springframework.web.bind.annotation.RestController;
    6. import javax.servlet.http.HttpServletRequest;
    7. /*
    8. * 测试请求参数接受
    9. */
    10. @RestController
    11. public class RequestController {
    12. // //原始方式
    13. // @RequestMapping ("/simpleParam")
    14. // public String simpleParam(HttpServletRequest request){
    15. // //获取请求参数
    16. // String name = request.getParameter("name");
    17. // String ageStr = request.getParameter("age");
    18. //
    19. // int age = Integer.parseInt(ageStr);
    20. // System.out.println(name + ":" + age + ":");
    21. //
    22. // return "OK!";
    23. // }
    24. //springboot 方式
    25. // @RequestMapping ("/simpleParam")
    26. // public String simpleParam( String name,Integer age){
    27. // System.out.println(name + ":" + age + ":");
    28. // return "OK!";
    29. // }
    30. // @RequestMapping ("/simpleParam")
    31. // public String simpleParam(@RequestParam(name = "name", required = false) String username, Integer age){
    32. // System.out.println(username + ":" + age + ":");
    33. // return "OK!";
    34. // }
    35. //2.实体参http://localhost:8080/simpleParam数
    36. @RequestMapping("/simplePojo")
    37. public String simplePojo(User user){
    38. System.out.println(user);
    39. System.out.println("姓名:" + user.getName());
    40. System.out.println("年龄:" + user.getAge());
    41. System.out.println("省份:" + user.getAddress().getProvince());
    42. System.out.println("城市:" + user.getAddress().getCity());
    43. return "YES OK!";
    44. }
    45. }

     


     

    4.数组集合参数

    1. //3.数组集合参数
    2. @RequestMapping("/arrayParam")
    3. public String arrayParam(String[] hobby){
    4. System.out.println(hobby);
    5. System.out.println(Arrays.toString(hobby));
    6. return "YES OK!";
    7. }

    1. //集合参数
    2. @RequestMapping("/listParam")
    3. public String listParam(@RequestParam List hobby){
    4. System.out.println(hobby);
    5. return "YES OK!";
    6. }


    5.日期参数

     


    6.Json参数

    1. //6.json参数
    2. @RequestMapping("/jsonParam")
    3. //@DateTimeFormat -> 指定时间传递的参数格式
    4. public String jsonParam(@RequestBody User user){
    5. System.out.println(user);
    6. return "YES OK!";
    7. }
    1. {
    2. "name": "小黑子",
    3. "age": 18,
    4. "address": {
    5. "province": "江西",
    6. "city": "南昌"
    7. }
    8. }


    7.路径参数

     

     

     

     

    1. package com.wjh.controller;
    2. import com.wjh.pojo.User;
    3. import org.springframework.format.annotation.DateTimeFormat;
    4. import org.springframework.web.bind.annotation.*;
    5. import javax.servlet.http.HttpServletRequest;
    6. import java.time.LocalDate;
    7. import java.time.LocalDateTime;
    8. import java.util.Arrays;
    9. import java.util.List;
    10. /*
    11. * 测试请求参数接受
    12. */
    13. @RestController
    14. public class RequestController {
    15. // //原始方式
    16. // @RequestMapping ("/simpleParam")
    17. // public String simpleParam(HttpServletRequest request){
    18. // //获取请求参数
    19. // String name = request.getParameter("name");
    20. // String ageStr = request.getParameter("age");
    21. //
    22. // int age = Integer.parseInt(ageStr);
    23. // System.out.println(name + ":" + age + ":");
    24. //
    25. // return "OK!";
    26. // }
    27. //springboot 方式
    28. @RequestMapping ("/simpleParam")
    29. public String simpleParam( String name,Integer age){
    30. System.out.println(name + ":" + age + ":");
    31. return "OK!";
    32. }
    33. @RequestMapping ("/simpleParamF")
    34. public String simpleParamF(@RequestParam(name = "name", required = false) String username, Integer age){
    35. System.out.println(username + ":" + age + ":");
    36. return "OK!";
    37. }
    38. //2.实体参http://localhost:8080/simpleParam数
    39. @RequestMapping("/simplePojo")
    40. public String simplePojo(User user){
    41. System.out.println(user);
    42. System.out.println("姓名:" + user.getName());
    43. System.out.println("年龄:" + user.getAge());
    44. System.out.println("省份:" + user.getAddress().getProvince());
    45. System.out.println("城市:" + user.getAddress().getCity());
    46. return "YES OK!";
    47. }
    48. //3.数组参数
    49. @RequestMapping("/arrayParam")
    50. public String arrayParam(String[] hobby){
    51. System.out.println(hobby);
    52. System.out.println(Arrays.toString(hobby));
    53. return "YES OK!";
    54. }
    55. //4.集合参数
    56. @RequestMapping("/listParam")
    57. public String listParam(@RequestParam List hobby){
    58. System.out.println(hobby);
    59. return "YES OK!";
    60. }
    61. //5.日期时间参数
    62. //http://localhost:8080/dateParam?updateTime=2023-09-18 09:12:30
    63. @RequestMapping("/dateParam")
    64. //@DateTimeFormat -> 指定时间传递的参数格式
    65. public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
    66. System.out.println(updateTime);
    67. return "YES OK!";
    68. }
    69. //6.json参数
    70. @RequestMapping("/jsonParam")
    71. //@DateTimeFormat -> 指定时间传递的参数格式
    72. public String jsonParam(@RequestBody User user){
    73. System.out.println(user);
    74. return "YES OK!";
    75. }
    76. //7.路径参数
    77. @RequestMapping("/path/{id}")
    78. //@DateTimeFormat -> 指定时间传递的参数格式
    79. public String pathParam(@PathVariable Integer id){
    80. System.out.println(id);
    81. return "YES OK!";
    82. }
    83. //8.路径参数
    84. //@DateTimeFormat -> 指定时间传递的参数格式
    85. @RequestMapping("/path/{id}/{name}")
    86. public String pathParam2(@PathVariable Integer id, @PathVariable String name){
    87. System.out.println(id);
    88. System.out.println(name);
    89. return "YES OK!";
    90. }
    91. }


    二.响应

    1. package com.wjh.controller;
    2. import com.wjh.pojo.Address;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RestController;
    5. import java.util.ArrayList;
    6. import java.util.List;
    7. /*
    8. 测试响应数据
    9. */
    10. @RestController
    11. public class ResponseController {
    12. @RequestMapping("/hello")
    13. public String hello(){
    14. System.out.println("Hello word!");
    15. return "Hello word!";
    16. }
    17. @RequestMapping("/getAddress")
    18. public Address getAddress(){
    19. Address address = new Address();
    20. address.setProvince("江西");
    21. address.setCity("南昌");
    22. System.out.println(address.getProvince() + "\n" + address.getCity());
    23. return address;
    24. }
    25. @RequestMapping("/listAddress")
    26. public List
      listAddress(){
    27. List
      list = new ArrayList<>();
    28. Address address = new Address();
    29. address.setProvince("江西");
    30. address.setCity("南昌");
    31. Address address2 = new Address();
    32. address2.setProvince("广东");
    33. address2.setCity("深圳");
    34. list.add(address);
    35. list.add(address2);
    36. for (Address lists: list) {
    37. System.out.println(lists);
    38. }
    39. return list;
    40. }
    41. }

     

    1. package com.wjh.pojo;
    2. /**
    3. * 统一响应结果封装类
    4. */
    5. public class Result {
    6. private Integer code ;//1 成功 , 0 失败
    7. private String msg; //提示信息
    8. private Object data; //数据 data
    9. public Result() {
    10. }
    11. public Result(Integer code, String msg, Object data) {
    12. this.code = code;
    13. this.msg = msg;
    14. this.data = data;
    15. }
    16. public Integer getCode() {
    17. return code;
    18. }
    19. public void setCode(Integer code) {
    20. this.code = code;
    21. }
    22. public String getMsg() {
    23. return msg;
    24. }
    25. public void setMsg(String msg) {
    26. this.msg = msg;
    27. }
    28. public Object getData() {
    29. return data;
    30. }
    31. public void setData(Object data) {
    32. this.data = data;
    33. }
    34. public static Result success(Object data){
    35. return new Result(1, "success", data);
    36. }
    37. public static Result success(){
    38. return new Result(1, "success", null);
    39. }
    40. public static Result error(String msg){
    41. return new Result(0, msg, null);
    42. }
    43. @Override
    44. public String toString() {
    45. return "Result{" +
    46. "code=" + code +
    47. ", msg='" + msg + '\'' +
    48. ", data=" + data +
    49. '}';
    50. }
    51. }

     

    结果是一样的,提高了实用性

    Springboot项目的静态资源(html,css,js等前端资源)默认存放目录为:

                            classpath:/static 、 classpath:/public、 classpath:/resources

    1. package com.wjh.utils;
    2. import org.dom4j.Document;
    3. import org.dom4j.Element;
    4. import org.dom4j.io.SAXReader;
    5. import java.io.File;
    6. import java.lang.reflect.Constructor;
    7. import java.lang.reflect.Field;
    8. import java.util.ArrayList;
    9. import java.util.List;
    10. public class XmlParserUtils {
    11. public static List parse(String file , Class targetClass) {
    12. ArrayList list = new ArrayList(); //封装解析出来的数据
    13. try {
    14. //1.获取一个解析器对象
    15. SAXReader saxReader = new SAXReader();
    16. //2.利用解析器把xml文件加载到内存中,并返回一个文档对象
    17. Document document = saxReader.read(new File(file));
    18. //3.获取到根标签
    19. Element rootElement = document.getRootElement();
    20. //4.通过根标签来获取 user 标签
    21. List elements = rootElement.elements("emp");
    22. //5.遍历集合,得到每一个 user 标签
    23. for (Element element : elements) {
    24. //获取 name 属性
    25. String name = element.element("name").getText();
    26. //获取 age 属性
    27. String age = element.element("age").getText();
    28. //获取 image 属性
    29. String image = element.element("image").getText();
    30. //获取 gender 属性
    31. String gender = element.element("gender").getText();
    32. //获取 job 属性
    33. String job = element.element("job").getText();
    34. //组装数据
    35. Constructor constructor = targetClass.getDeclaredConstructor(String.class, Integer.class, String.class, String.class, String.class);
    36. constructor.setAccessible(true);
    37. T object = constructor.newInstance(name, Integer.parseInt(age), image, gender, job);
    38. list.add(object);
    39. }
    40. } catch (Exception e) {
    41. e.printStackTrace();
    42. }
    43. return list;
    44. }
    45. }

    1. package com.wjh.pojo;
    2. public class Emp {
    3. private String name;
    4. private Integer age;
    5. private String image;
    6. private String gender;
    7. private String job;
    8. public Emp() {
    9. }
    10. public Emp(String name, Integer age, String image, String gender, String job) {
    11. this.name = name;
    12. this.age = age;
    13. this.image = image;
    14. this.gender = gender;
    15. this.job = job;
    16. }
    17. public String getName() {
    18. return name;
    19. }
    20. public void setName(String name) {
    21. this.name = name;
    22. }
    23. public Integer getAge() {
    24. return age;
    25. }
    26. public void setAge(Integer age) {
    27. this.age = age;
    28. }
    29. public String getImage() {
    30. return image;
    31. }
    32. public void setImage(String image) {
    33. this.image = image;
    34. }
    35. public String getGender() {
    36. return gender;
    37. }
    38. public void setGender(String gender) {
    39. this.gender = gender;
    40. }
    41. public String getJob() {
    42. return job;
    43. }
    44. public void setJob(String job) {
    45. this.job = job;
    46. }
    47. @Override
    48. public String toString() {
    49. return "Emp{" +
    50. "name='" + name + '\'' +
    51. ", age=" + age +
    52. ", image='" + image + '\'' +
    53. ", gender='" + gender + '\'' +
    54. ", job='" + job + '\'' +
    55. '}';
    56. }
    57. }

    1. package com.wjh.controller;
    2. import com.wjh.pojo.Emp;
    3. import com.wjh.pojo.Result;
    4. import com.wjh.utils.XmlParserUtils;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.RestController;
    7. import java.util.List;
    8. @RestController
    9. public class EmoController {
    10. @RequestMapping("/listEmp")
    11. public Result list(){
    12. //1.加载并解析emp.xml文件
    13. //String file = "D:\\JavaWeb2023\\java_web_project\\springboot-web-req-resp\\src\\main\\resources\\emp.xml";
    14. String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
    15. System.out.println(file);
    16. List empList = XmlParserUtils.parse(file, Emp.class);
    17. //2.对数据进行转换处理 -gender, job
    18. empList.stream().forEach(emp -> {
    19. //处理gander 1: 男, 2: 女
    20. String gander = emp.getGender();
    21. if("1".equals(gander)){
    22. emp.setGender("男");
    23. }else if("2".equals(gander)){
    24. emp.setGender("女");
    25. }
    26. //处理job - 1:讲师, 2:班主任, 3:就业指导
    27. String job = emp.getJob();
    28. if("1".equals(job)){
    29. emp.setJob("讲师");
    30. }else if("2".equals(job)){
    31. emp.setJob("班主任");
    32. }else if("3".equals(job)){
    33. emp.setJob("就业指导");
    34. }
    35. });
    36. //3.响应数据
    37. return Result.success(empList);
    38. }
    39. }

     

     


    三.分层解耦

    1.三层架构

     

    1. package com.wjh.controller;
    2. import com.wjh.pojo.Emp;
    3. import com.wjh.pojo.Result;
    4. import com.wjh.service.EmpService;
    5. import com.wjh.service.impl.EmpServiceA;
    6. import com.wjh.utils.XmlParserUtils;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RestController;
    9. import java.util.List;
    10. @RestController
    11. public class EmoController {
    12. private EmpService empService = new EmpServiceA();
    13. @RequestMapping("/listEmp")
    14. public Result list() {
    15. //1.调用service,获取数据
    16. List empList = empService.listEmp();
    17. //3.响应数据
    18. return Result.success(empList);
    19. }
    20. }
    21. // //1.加载并解析emp.xml文件
    22. //
    23. // //String file = "D:\\JavaWeb2023\\java_web_project\\springboot-web-req-resp\\src\\main\\resources\\emp.xml";
    24. // String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
    25. // System.out.println(file);
    26. // List empList = XmlParserUtils.parse(file, Emp.class);
    27. //
    28. // //2.对数据进行转换处理 -gender, job
    29. // empList.stream().forEach(emp -> {
    30. // //处理gander 1: 男, 2: 女
    31. // String gander = emp.getGender();
    32. // if("1".equals(gander)){
    33. // emp.setGender("男");
    34. // }else if("2".equals(gander)){
    35. // emp.setGender("女");
    36. // }
    37. //
    38. // //处理job - 1:讲师, 2:班主任, 3:就业指导
    39. // String job = emp.getJob();
    40. // if("1".equals(job)){
    41. // emp.setJob("讲师");
    42. // }else if("2".equals(job)){
    43. // emp.setJob("班主任");
    44. // }else if("3".equals(job)){
    45. // emp.setJob("就业指导");
    46. // }
    47. //
    48. // });

    1. package com.wjh.Dao.impl;
    2. import com.wjh.Dao.EmpDao;
    3. import com.wjh.pojo.Emp;
    4. import com.wjh.utils.XmlParserUtils;
    5. import java.util.List;
    6. public class EmoDaoA implements EmpDao {
    7. @Override
    8. public List listEmp() {
    9. String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
    10. System.out.println(file);
    11. List empList = XmlParserUtils.parse(file, Emp.class);
    12. return empList;
    13. }
    14. }

     

    1. package com.wjh.Dao;
    2. import com.wjh.pojo.Emp;
    3. import java.util.List;
    4. public interface EmpDao {
    5. //获取员工列表数据
    6. public List listEmp();
    7. }

    1. package com.wjh.pojo;
    2. public class Emp {
    3. private String name;
    4. private Integer age;
    5. private String image;
    6. private String gender;
    7. private String job;
    8. public Emp() {
    9. }
    10. public Emp(String name, Integer age, String image, String gender, String job) {
    11. this.name = name;
    12. this.age = age;
    13. this.image = image;
    14. this.gender = gender;
    15. this.job = job;
    16. }
    17. public String getName() {
    18. return name;
    19. }
    20. public void setName(String name) {
    21. this.name = name;
    22. }
    23. public Integer getAge() {
    24. return age;
    25. }
    26. public void setAge(Integer age) {
    27. this.age = age;
    28. }
    29. public String getImage() {
    30. return image;
    31. }
    32. public void setImage(String image) {
    33. this.image = image;
    34. }
    35. public String getGender() {
    36. return gender;
    37. }
    38. public void setGender(String gender) {
    39. this.gender = gender;
    40. }
    41. public String getJob() {
    42. return job;
    43. }
    44. public void setJob(String job) {
    45. this.job = job;
    46. }
    47. @Override
    48. public String toString() {
    49. return "Emp{" +
    50. "name='" + name + '\'' +
    51. ", age=" + age +
    52. ", image='" + image + '\'' +
    53. ", gender='" + gender + '\'' +
    54. ", job='" + job + '\'' +
    55. '}';
    56. }
    57. }

    1. package com.wjh.service.impl;
    2. import com.wjh.Dao.EmpDao;
    3. import com.wjh.Dao.impl.EmoDaoA;
    4. import com.wjh.pojo.Emp;
    5. import com.wjh.service.EmpService;
    6. import java.util.List;
    7. public class EmpServiceA implements EmpService {
    8. private EmpDao empDao = new EmoDaoA();
    9. @Override
    10. public List listEmp() {
    11. //1.调用dao,获取数据
    12. List empList = empDao.listEmp();
    13. //2.对数据进行转换处理 -gender, job
    14. empList.stream().forEach(emp -> {
    15. //处理gander 1: 男, 2: 女
    16. String gander = emp.getGender();
    17. if("1".equals(gander)){
    18. emp.setGender("男");
    19. }else if("2".equals(gander)){
    20. emp.setGender("女");
    21. }
    22. //处理job - 1:讲师, 2:班主任, 3:就业指导
    23. String job = emp.getJob();
    24. if("1".equals(job)){
    25. emp.setJob("讲师");
    26. }else if("2".equals(job)){
    27. emp.setJob("班主任");
    28. }else if("3".equals(job)){
    29. emp.setJob("就业指导");
    30. }
    31. });
    32. return empList;
    33. }
    34. }

     

    1. package com.wjh.service;
    2. import com.wjh.pojo.Emp;
    3. import java.util.List;
    4. public interface EmpService {
    5. //获取员工列表
    6. public List listEmp();
    7. }


    2.分层解耦

    控制反转:

            Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转


    依赖注入:

            Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。


    Bean对象:

            IOC容器中创建、管理的对象,称之为bean


    3.IOC & DI入门

     

     @Component     //将当前类交给IOC容器管理,成为IOC容器中的bean

    @Autowired         //运行时,IOC容器会提供该类型的bean对象,并复制给改变量 - 依赖注入

     

     

     

     

    4.IOC详解

     

    5.DI详解

    @Primary        -->         在又多个相同bean情况下,想用的实现方法上加这个注解


    @Qualifier       -->         @Qualifier("A") 或者@Qualifier ("B")


    @Resource     -->         不属于springboot,属于JDK当中的,加在private EmpDao empDao 上

  • 相关阅读:
    vue插件的使用方法
    三. Netty 进阶
    scratch小老鼠偷面包 电子学会图形化编程scratch等级考试二级真题和答案解析2022年9月
    带你认识npm和yarn
    数据库批处理
    【408数据结构与算法】—栈和队列的案例引入(九)
    解决Oracle报错ORA-01403: 未找到任何数据
    2022软件工程师薪资报告出炉!
    政策解读:《科技保险业务统计制度》带来新要求,数据报送攻略大公开!
    GIS前端编程-Leaflet插件扩展
  • 原文地址:https://blog.csdn.net/wangjh11234/article/details/132921790