Spring Boot2(Spring Boot 的Web开发 springMVC 请求处理 参数绑定 常用注解 数据传递)

news2024/9/21 20:24:06

目录

一、Spring Boot 的Web开发

1. 静态资源映射规则

2. enjoy模板引擎

二、springMVC

1. springMVC-请求处理

测试: 

以post方式请求

限制请求携带的参数

@GetMapping   查询

@PostMapping  新增

@DeleteMapping删除

@PutMapping   修改 

2. springMVC-参数绑定

2.1 基本类型和 String 类型作为参数

单个参数

多个参数

2.2 POJO 类型作为参数

单一对象

对象嵌套       

@RequestParam

2.3 POJO 类中包含集合类型参数

2.4 使用 ServletAPI 对象作为方法参数

3. springMVC-常用注解

3.1 @RequestParam

name属性

多个参数

defaultValue属性:设置默认值

不传参数

3.2 @RequestBody

3.3 @PathVariable

restFul

3.4 @RequestHeader

3.5 @CookieValue

4.springMVC-数据传递

4.1 字符串

充当试图的逻辑名称,默认页面跳转为请求转发方式

作充当一次请求重定向

作充当一次请求转发

通过session传入数据

4.2 json


一、Spring Boot 的Web开发

1. 静态资源映射规则

帮助文档

总结:只要静态资源放在类路径下:

called /static (or /public or /resources or //METAINF/resources

即 放在 static 下就行

访问 : 当前项目根路径/ + 静态资源名

springboot只需要将图片放在 static 下 就可以了

2. enjoy模板引擎

  • 1.将页面保存在templates目录下
  • 2.添加坐标
            <dependency>
                <groupId>com.jfinal</groupId>
                <artifactId>enjoy</artifactId>
                <version>5.0.3</version>
            </dependency>
  • 3.开启配置

在configure包下 新建配置类  官网可以复制

@Configuration
public class SpringBootConfig {

    @Bean(name = "jfinalViewResolver")
    public JFinalViewResolver getJFinalViewResolver() {

        // 创建用于整合 spring boot 的 ViewResolver 扩展对象
        JFinalViewResolver jfr = new JFinalViewResolver();

        // 对 spring boot 进行配置
        jfr.setSuffix(".html");
        jfr.setContentType("text/html;charset=UTF-8");
        jfr.setOrder(0);

        // 设置在模板中可通过 #(session.value) 访问 session 中的数据
        jfr.setSessionInView(true);

        // 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样
        Engine engine  = JFinalViewResolver.engine;

        // 热加载配置能对后续配置产生影响,需要放在最前面
        engine.setDevMode(true);

        // 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件
        engine.setToClassPathSourceFactory();

        // 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath
        // 代替 jfr.setPrefix("/view/")
        engine.setBaseTemplatePath("/templates/");


        // 更多配置与前面章节完全一样
        // engine.addDirective(...)
        // engine.addSharedMethod(...);

        return jfr;
    }
}
  • 4.编写代码
@Controller
@RequestMapping("user")
public class UserController {
    /**
     *
     *@RequestMapping
     * 意义:处理用户的请求,相似于doget与dopost
     * 位置:
     *      类上:一级目录
     *      方法:二级目录
     *      例如:user/save
     *          user/delete
     *          student/save
     *          student/delete
     *  属性:
     *      value = "",path = ""
     *      表示请求路径
     *      =========================
     *      method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
     *      =========================
     *      params = ""
     *      限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数
     *
     *      注意:1.超链接默认发送的是get请求
     *          2.所有请求所携带的参数格式均为:key = value
     *
     *     @DeleteMapping删除
     *     @PutMapping   修改
     *     @GetMapping   查询
     *     @PostMapping  新增
     *
     *     @RequestMapping可以点击查看源码
     *     @Target({ElementType.METHOD, ElementType.TYPE})
     *          METHOD==代表修饰方法,TYPE==代表修饰类

     * */
    @RequestMapping(value = "/init")//二级目录
    public String userInit(){
        System.out.println("==========进入了springMVC的控制器=========");
        System.out.println("调用业务层,调用持久层");
        return  "success";//返回方法执行完要跳转的页面名称
    }
}

加坐标 写配置类
在templates 下有success.html
不加 responseboding 

二、springMVC

  • 1.请求处理
  • 2.参数绑定
  • 3.常用注解
  • 4.数据传递
  • 5.文件上传

1. springMVC-请求处理

@RequestMapping

  • 意义:处理用户的请求,相似于doget与dopost
  • 位置:
    • 类上:一级目录
    • 方法:二级目录

例如:

  • user/save
  • user/delete
  • student/save
  • student/delete

属性:

  • value = "",path = "" 表示请求路径
  • method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
  •  params = ""限制请求参数,                                                                                              例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数


注意:

  • 1.超链接默认发送的是get请求
  • 2.所有请求所携带的参数格式均为:key = value

还有这些请求

  • @GetMapping   查询

  • @PostMapping  新增

  • @PutMapping   修改

  • @DeleteMapping删除

        

@RequestMapping可以点击查看源码
@Target({ElementType.METHOD, ElementType.TYPE})
 METHOD==代表修饰方法,TYPE==代表修饰类、

浏览器默认 get

post 跳转不了

测试: 

准备工作

1.下载postman

使用postman测试

故 新建一个文件夹 然后新建一个测试 

2. 使用上面的success.html作为返回页面

以post方式请求

@Controller
@RequestMapping("user")
public class UserController {
    /**
     *
     *@RequestMapping
     * 意义:处理用户的请求,相似于doget与dopost
     * 位置:
     *      类上:一级目录
     *      方法:二级目录
     *      例如:user/save
     *          user/delete
     *          student/save
     *          student/delete
     *  属性:
     *      value = "",path = ""
     *      表示请求路径
     *      =========================
     *      method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
     *      =========================
     *      params = ""
     *      限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数
     *
     *      注意:1.超链接默认发送的是get请求
     *          2.所有请求所携带的参数格式均为:key = value
     *
     *     @DeleteMapping删除
     *     @PutMapping   修改
     *     @GetMapping   查询
     *     @PostMapping  新增
     *
     *     @RequestMapping可以点击查看源码
     *     @Target({ElementType.METHOD, ElementType.TYPE})
     *          METHOD==代表修饰方法,TYPE==代表修饰类

     * */

        @RequestMapping(value="/init")//二级目录
        public String userInit(){
            System.out.println("==========进入了springMVC的控制器=========");
            System.out.println("调用业务层,调用持久层");
            return "success";//返回方法执行完要跳转的页面名称
        }

        @RequestMapping(value="/show1",method ={RequestMethod.POST})
        public String show1(){
            System.out.println("==========进入了springMVC的控制器=========");
            System.out.println("使用post方式发送请求进入");
            return "success";//返回方法执行完要跳转的页面名称
        }

}

输入url

限制请求携带的参数

@RequestMapping(value = "/show2",params = {"msg1=aa","msg2=bb"})
    public String show2(){
        System.out.println("==========进入了springMVC的控制器=========");
        System.out.println("限制请求携带的参数");
        return "success";//返回方法执行完要跳转的页面名称
    }

设置参数

@GetMapping   查询

 //使用postman测试
        @GetMapping("/show3")
        public String show3(){
            System.out.println("==========进入了springMVC的控制器=========");
            System.out.println("必须使用get方式请求");
            return "success";//返回方法执行完要跳转的页面名称
        }

@PostMapping  新增

 @PostMapping("/show4")
        public String show4(){
            System.out.println("==========进入了springMVC的控制器=========");
            System.out.println("必须使用post方式请求");
            return "success";//返回方法执行完要跳转的页面名称
        }

@DeleteMapping删除

 

 @DeleteMapping("/show5")
        public String show5(){
            System.out.println("==========进入了springMVC的控制器=========");
            System.out.println("必须使用delete方式请求");
            return "success";//返回方法执行完要跳转的页面名称
        }

@PutMapping   修改 

@PutMapping("/show6")
        public String show6(){
            System.out.println("==========进入了springMVC的控制器=========");
            System.out.println("必须使用put方式请求");
            return "success";//返回方法执行完要跳转的页面名称
        }

2. springMVC-参数绑定

springMVC请求参数的绑定
绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
支持数据类型:
1.基本类型参数:
               包括基本类型和 String 类型
2.POJO类型参数:
                包括实体类,以及关联的实体类
3.数组和集合类型参数:
                包括 List 结构和 Map 结构的集合(包括数组)
4.使用 ServletAPI 对象作为方法参数
         HttpServletRequest
         HttpServletResponse
         HttpSession
         java.security.Principal
         Locale
         InputStream
         OutputStream
         Reader
         Writer

使用要求

  • 1.发送请求中携带数据的key与方法参数的name必须一致
  • 2.数据类型合法

测试 准备工作 

在pojo 下创建俩实体类

public class Dep implements Serializable {
    private  int did;
    private String dname;

    //依赖员工集合
    private List<Emp> mylist;
    private Map<String, Emp> myMap;
set get tostring..
}
public class Emp {
    private int eid;
    private String ename;
    private String esex;


    //emp依赖的dep对象
    private Dep dept;
set get tostring..
}

templates 下创建页面

one.html

<!DOCTYPE html>
<html lang="cn" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Title</title>
</head>
<body>

    <h1>springMVC控制器方法参数作用:接受用户请求中的数据</h1>
    <hr/>

    <h3>基本类型和 String 类型作为参数</h3>
    <a href="/one/show1?msg1=9527">发送请求1</a>
    <a href="/one/show2?msg1=jdk&msg2=9527">发送请求2</a>

    <h3>POJO 类型作为参数</h3>
    <a href="/one/show3?eid=1&ename=郭凡&esex=小奶狗">发送请求3</a>

    <form action="/one/show4" method="post">
        员工编号:<input type="text" name="eid" ><br/>
        员工姓名:<input type="text" name="ename" ><br/>
        员工性别:<input type="text" name="esex" ><br/>
        部门编号:<input type="text" name="dept.did" ><br/>
        部门名称:<input type="text" name="dept.dname" ><br/>
        <input type="submit" value="发送请求4"/>
    </form>

    <form action="/one/map" method="post">
        员工编号:<input type="text" name="eids"><br/>
        员工姓名:<input type="text" name="enames"><br/>
        员工性别:<input type="text" name="esexs"><br/>
        <input type="submit" value="发送请求4(map)"/>
    </form>


    <h3>POJO 类中包含集合类型参数</h3>
    <form action="/one/show5" method="post">
        部门编号:<input type="text" name="did" ><br/>
        部门名称:<input type="text" name="dname" ><br/>
        员工编号1:<input type="text" name="mylist[0].eid" ><br/>
        员工姓名1:<input type="text" name="mylist[0].ename" ><br/>
        员工性别1:<input type="text" name="mylist[0].esex" ><br/>
        员工编号2:<input type="text" name="mylist[1].eid" ><br/>
        员工姓名2:<input type="text" name="mylist[1].ename" ><br/>
        员工性别2:<input type="text" name="mylist[1].esex" ><br/>

        员工编号3:<input type="text" name="myMap['one'].eid" ><br/>
        员工姓名3:<input type="text" name="myMap['one'].ename" ><br/>
        员工性别3:<input type="text" name="myMap['one'].esex" ><br/>
        员工编号4:<input type="text" name="myMap['two'].eid" ><br/>
        员工姓名4:<input type="text" name="myMap['two'].ename" ><br/>
        员工性别4:<input type="text" name="myMap['two'].esex" ><br/>
        <input type="submit" value="发送请求5"/>
    </form>

    <a href="/one/show6?nums=123&nums=456&nums=789">发送请求6</a>

    <h3>使用 ServletAPI 对象作为方法参数</h3>
    <a href="/one/show7">发送请求7</a>

</body>
</html>

success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>success zkt</h1>
</body>
</html>

配置类同上 

2.1 基本类型和 String 类型作为参数

controller

单个参数
/**
 * springMVC请求参数的绑定
 * 绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
 *
 * 一.支持数据类型:
 *      1.基本类型参数:
 *                  包括基本类型和 String 类型
 *      2.POJO类型参数:
 *                  包括实体类,以及关联的实体类
 *      3.数组和集合类型参数:
 *                  包括 List 结构和 Map 结构的集合(包括数组)
 *      4.使用 ServletAPI 对象作为方法参数
 *          HttpServletRequest
 *          HttpServletResponse
 *          HttpSession
 *          java.security.Principal
 *          Locale
 *          InputStream
 *          OutputStream
 *          Reader
 *          Writer
 *
 *  二.使用要求
 *     1.发送请求中携带数据的key与方法参数的name必须一致
 *     2.数据类型合法
 *
 * */

@Controller
@RequestMapping("/one")
public class OneController {

    /**
     * 进入one.html页面
     * */
    @RequestMapping("/show")
    public String show(){
        return "one";
    }

    /***********************基本类型和 String 类型作为参数*********************************/
    @RequestMapping("/show1")
    public String show1(String msg1){
        System.out.println("=====接受到用户发送数据为:"+msg1+"=======");
        return "success";
    }
}

输入http://localhost:8080/one/show

进入主页面

点击发送请求一

测试结果:


多个参数
@RequestMapping("/show2")
    public String show2(String msg1,int msg2){
        System.out.println("=====接受到用户发送数据为:"+msg1+"=======");
        System.out.println("=====接受到用户发送数据为:"+msg2+"=======");
        return "success";
    }

点击发送请求二

测试结果

2.2 POJO 类型作为参数

单一对象
/***********************POJO 类型作为参数*********************************/
    //单一对象
    @RequestMapping("/show3")
    public String show3(Emp emp){
        System.out.println("=====接受到用户发送数据为:"+emp+"=======");
        return "success";
    }

点击发送请求3

测试结果


对象嵌套       
//对象嵌套
    @RequestMapping("/show4")
    public String show4(Emp emp){
        System.out.println("=====接受到用户发送数据为:"+emp+"=======");
        return "success";
    }

点击发送请求4

测试结果


@RequestParam
   //@RequestParam
    @RequestMapping("/map")
    public String map(@RequestParam Map map){
        System.out.println(map);
        return "success";
    }

点击发送请求4(map)

测试结果:

2.3 POJO 类中包含集合类型参数

  /*********************POJO 类中包含集合类型参数*********************************/

    @RequestMapping("/show5")
    public String show5(Dep dep){
        System.out.println("=====接受到用户发送数据为:"+dep+"=======");
        return "success";
    }

 

点击发送请求5

测试结果:


   @RequestMapping("/show6")
    public String show6(int[] nums){
        System.out.println("=====接受到用户发送数据为:"+ Arrays.toString(nums) +"=======");
        return "success";
    }

点击发送请求6

测试结果:

2.4 使用 ServletAPI 对象作为方法参数

 /*********************使用 ServletAPI 对象作为方法参数*********************************/

@RequestMapping("/show7")
public String show7(HttpServletRequest request, HttpServletResponse response){
    System.out.println(request);
    System.out.println(response);
    request.getParameter("msg1");

    HttpSession session = request.getSession();
    System.out.println(session);
//    session.setAttribute("","");

//    try {
//        response.sendRedirect("重定向");
//    } catch (IOException e) {
//        e.printStackTrace();
//    }
    ServletContext application = session.getServletContext();
    return "success";
}

点击发送请求7

测试结果:

3. springMVC-常用注解

3.1 @RequestParam

作用:

  • 把请求中指定名称的参数给控制器中的形参赋值。
  • 如果页面标签名称和方法参数名称不一致,可以使用此注解实现

属性:

  • name属性:设置参数名称
  • defaultValue属性:设置默认值
  • required属性:设置是否为必传

测试:

name属性
/**
 * springMVC常用注解
 *
 * 一.@RequestParam
 *      作用:
 *          把请求中指定名称的参数给控制器中的形参赋值。
 *          如果页面标签名称和方法参数名称不一致,可以使用此注解实现
 *      属性:
 *          name属性:设置参数名称
 *          defaultValue属性:设置默认值
 *          required属性:设置是否为必传
 *
 * 二.@RequestBody
 *      作用:
 *          用于获取"请求体"内容。直接使用得到是 key=value&key=value...
 *          结构的数据,并可以转换为对象
 *      属性:
 *          required:是否必须有请求体。默认值是:true。
 *
 *
 *
 * 三.@PathVaribale
 *      作用:
 *          用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},
 *          这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之
 *          后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志
 *      属性:
 *          value:用于指定 url 中占位符名称。
 *          required:是否必须提供占位符。
 *
 *  Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
 *  主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,
 *  更易于实现缓存机制等。
 *
 *  Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
 *       GET:用于获取资源
 *       POST:用于新建资源
 *       PUT:用于更新资源
 *       DELETE:用于删除资源
 * 例如:
 *  /users/1                GET :      得到 id = 1 的 user
 *  /users/1                DELETE:    删除 id = 1 的 user
 *  /users/1/新名/新性       PUT:       更新 id = 1 的 user
 *  /users/新名/新性         POST:      新增 user
 *
 * */


@Controller
@RequestMapping("/one")
public class OneController {


    /**
     * @RequestParam("名称必须与页面标签或者url地址key名称一致")
     * */
    @RequestMapping("/show1")
    public String show1(@RequestParam(name="msg1") String msg){
        System.out.println("=====接受到用户发送数据为:"+msg+"=======");
        return "success";
    }
}

使用postman测试


多个参数
@RequestMapping("/show2")
    public String show2(@RequestParam("msg1") String msg, @RequestParam("msg2") int num){
        System.out.println("=====接受到用户发送数据为:"+msg+"=======");
        System.out.println("=====接受到用户发送数据为:"+num+"=======");
        return "success";
    }


defaultValue属性:设置默认值
 @RequestMapping("/show3")
    public String show4(@RequestParam(name = "uname",defaultValue = "暂无用户") String name){
        System.out.println("账号:"+name);
        return "success";
    }


不传参数
@RequestMapping("/test")
    public String test(@RequestParam String name){
        System.out.println("账号:"+name);
        return "success";
    }

3.2 @RequestBody

作用:

  • 用于获取"请求体"内容。直接使用得到是 key=value&key=value...
  • 结构的数据,并可以转换为对象

属性:
required:是否必须有请求体。默认值是:true。

测试:

/**
     * 前后端分离
     * @RequestBody可以将json ===》 javaBean
     * 注意:
     *  1.前端不能使用GET方式提交数据,GET方式无请求体
     * {
     * 	"eid":007,
     * 	"ename":"詹姆斯邦德",
     * 	"esex":"绅士"
     * }
     *
     * * */
    @RequestMapping("/show4")
    public String show4(@RequestBody Emp emp){
        System.out.println("=========="+emp+"==========");
        return "success";
    }

3.3 @PathVariable

作用:

  • 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},
  • 这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之后加入的,是 springmvc 支持 rest 风格 URL 的一个重要标志

属性:

  • value:用于指定 url 中占位符名称。
  • required:是否必须提供占位符。
@PostMapping("/show5/{uname}/{pwd}")
    public String show5(@PathVariable("uname") String msg1, @PathVariable("pwd") String msg2){
        System.out.println(msg1);
        System.out.println(msg2);
        return "success";
    }

简写

    @PostMapping("/show6/{uname}/{pwd}")
    public String show6(@PathVariable String uname, @PathVariable String pwd){
        System.out.println(uname);
        System.out.println(pwd);
        return "success";
    }

restFul

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,
更易于实现缓存机制等。


Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

  •  GET:用于获取资源
  •  POST:用于新建资源
  •  PUT:用于更新资源
  •  DELETE:用于删除资源

例如:

  •  /users/1                GET :      得到 id = 1 的 user
  •  /users/1                DELETE:    删除 id = 1 的 user
  •  /users/1/新名/新性       PUT:       更新 id = 1 的 user
  •  /users/新名/新性         POST:      新增 user

3.4 @RequestHeader

作用:用于获取请求消息头。
属性:

  • value:提供消息头名称
  • required:是否必须有此消息头

测试:

 /**
     * 获取头信息
     * 只获取头信息中的Accept-Language对应的数据(记得使用浏览器测试)
     */
    @RequestMapping("/show7")
    public String show7(@RequestHeader(value = "msg1") String msg) {
        System.out.println(msg);
        return "success";
    }

3.5 @CookieValue

作用:用于把指定 cookie 名称的值传入控制器方法参数。
属性:

  • value:指定 cookie 的名称。
  • required:是否必须有此 cookie

测试:

 /**
     * 获取cookie
     */

    @RequestMapping("/show8")
    public String show8(@CookieValue(value = "JSESSIONID", required = false) String jsessionid) {
        System.out.println(jsessionid);
        return "success";
    }

4.springMVC-数据传递

4.1 字符串

准备工作

index.html

<!DOCTYPE html>
<html lang="cn">
<head>
    <title>Title</title>
</head>
<body>

    <h3>springMVC控制器返回字符串</h3>
    <a href="/string/show1">发送请求1</a><br/>
    <a href="/string/show2">发送请求2</a><br/>
    <a href="/string/show3">发送请求3</a><br/>
    <a href="/string/show4">发送请求4</a><br/>
    <hr/>
    <h3>springMVC控制器返回json字符串</h3>
    <a href="/json/show1">发送请求1</a><br/>
    <a href="/json/show2">发送请求2</a><br/>




</body>
</html>

success_String.html

注意 测试123的适合将span标签删掉 要不然会报错

<html lang="cn">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>返回值String成功页面</h1>
<!--        <span>#(session.emp.eid)</span>-->
<!--        <span>#(session.emp.ename)</span>-->
<!--        <span>#(session.emp.esex)</span><br/>-->
</body>
</html>

主页面


充当试图的逻辑名称,默认页面跳转为请求转发方式
/**
 * 返回值为:字符串
 * */
@Controller
@RequestMapping("/string")
public class StringController_01 {

    /**
     * 进入首页
     * */
    @RequestMapping("/show")
    public String show(){
        return "index";
    }

    /*
    * 充当试图的逻辑名称,默认页面跳转为请求转发方式
    * */
    @RequestMapping("/show1")
    public String show1(){
        System.out.println("=========show1=========");
        return "success_String";
    }
}


作充当一次请求重定向
 /*
      * 作充当一次请求转发或重定向
      * */
    @RequestMapping("/show2")
    public String show2(){
        System.out.println("=========show2=========");
        return "redirect:show1";
    }


作充当一次请求转发
  @RequestMapping("/show3")
    public String show3(){
        System.out.println("=========show3=========");
        return "forward:show1";
    }


通过session传入数据
 @RequestMapping("/show4")
    public String show4(HttpServletRequest request){
        System.out.println("=========show4=========");
        //1.查询数据库(模拟)
        Emp emp = new Emp(1,"张毅老师","男");
        //2.获取session
        request.getSession().setAttribute("emp",emp);
        return "success_String";
    }

恢复span标签


4.2 json

@Controller
@RequestMapping("/json")
public class JsonController_02 {

    /**
     *
     * @ResponseBody   对象====>json
     *  位置:1.类
     *      2.方法
     *
     *
     * @RequestBody    json====>对象
     * 位置:方法参数
     *
     * @RestController   =  @Controller  +  @ResponseBody
     *
     * */

    @RequestMapping("/show1")
    @ResponseBody
    public List<Emp> show1(){
        //1模拟数据库
        Emp emp1 = new Emp(1,"张毅老师","男");
        Emp emp2 = new Emp(2,"张毅老师","男");
        Emp emp3 = new Emp(3,"张毅老师","男");
        List<Emp> list = new ArrayList<>();
        list.add(emp1);
        list.add(emp2);
        list.add(emp3);
        return list;
    }
}

打印hello world

@RequestMapping("/show2")
    @ResponseBody
    public String show2(){
        return "helloWorld";
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.java操作RabbitMQ-简单队列

1.引入依赖 <!--rabbitmq依赖客户端--> <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId> </dependency> 操作文件的依赖 <!--操作文件流的一个依赖--> <dependency><groupId>c…

【AI教程-吴恩达讲解Prompts】第1篇 - 课程简介

文章目录 简介Prompt学习相关资源 两类大模型原则与技巧 简介 欢迎来到面向开发者的提示工程部分&#xff0c;本部分内容基于吴恩达老师的《Prompt Engineering for Developer》课程进行编写。《Prompt Engineering for Developer》课程是由吴恩达老师与 OpenAI 技术团队成员 I…

vue学习笔记(十)——Vuex(状态管理,组件间共享数据)

1. vuex基础-介绍 1.1 为什么会有Vuex ? 在现代 Web 开发复杂多变的需求驱动之下&#xff0c;组件化开发已然成为了事实上的标准。然而大多数场景下的组件都并不是独立存在的&#xff0c;而是相互协作共同构成了一个复杂的业务功能。 组件间的通信成为了必不可少的开发需求。…

Android IjkPlayer内核编译记(一)so库编译使用

转载请注明出处&#xff1a;https://blog.csdn.net/kong_gu_you_lan/article/details/140528831 本文出自 容华谢后的博客 0.写在前面 最近在搞RTMP协议直播拉流的功能&#xff0c;使用了B站开源的IjkPlayer作为播放器内核&#xff0c;在网络不好的情况下延迟会比较高&#xf…

Guns v7.3.0:基于 Vue3、Antdv 和 TypeScript 打造的开箱即用型前端框架

摘要 本文深入探讨了Guns v7.3.0前端项目&#xff0c;该项目是基于Vue3、Antdv和TypeScript的前端框架&#xff0c;以Vben Admin的脚手架为基础进行了改造。文章分析了Guns 7.3.0的技术特点&#xff0c;包括其使用Vue3、vite2和TypeScript等最新前端技术栈&#xff0c;以及提供…

环信IM x 亚马逊云科技,助力出海企业实现可靠通讯服务

随着全球化进程的加速&#xff0c;越来越多的企业选择出海&#xff0c;拓展国际市场。然而&#xff0c;面对不同国家和地区的用户&#xff0c;企业在即时通讯方面遇到了诸多挑战。为了帮助企业克服这些困难&#xff0c;环信IM与亚马逊云科技强强联手&#xff0c;共同推出了一套…

蚂蚁集团推出EchoMimic:能通过音频和面部标志生成逼真的肖像动画视频

蚂蚁集团最近推出了一项名为EchoMimic的新技术。能通过音频和面部标志生成逼真的肖像动画视频&#xff0c;让你的声音和面部动作被完美复制到视频中&#xff0c;效果自然如照镜子。 EchoMimic不仅可以单独使用音频或面部标志点生成肖像视频&#xff0c;也可以将两者结合&#…

CSPVD 智慧工地安全帽安全背心检测开发包

CSPVD SDK适用于为各种智慧工地应用增加安全防护穿戴合规的检测能力&#xff0c;能够有效检测未戴安全帽和未穿 安全背心的人员&#xff0c;提供Web API和原生API。官方下载&#xff1a;CSPVD工地安全防护检测 1、目录组织 CSPVD开发包的目录组织说明如下&#xff1a; xlpr_…

价格战再起:OpenAI 发布更便宜、更智能的 GPT-4o Mini 模型|TodayAI

OpenAI 今日推出了一款名为 GPT-4o Mini 的新模型&#xff0c;这款模型较轻便且成本更低&#xff0c;旨在为开发者提供一个经济实惠的选择。与完整版模型相比&#xff0c;GPT-4o mini 在成本效益方面表现卓越&#xff0c;价格仅为每百万输入 tokens 15 美分和每百万输出 tokens…

喜报!极限科技再获国家发明专利:《一种超大规模分布式集群架构的数据处理方法》,引领大数据处理技术创新

近日&#xff0c;极限数据&#xff08;北京&#xff09;科技有限公司&#xff08;简称&#xff1a;极限科技&#xff09;传来喜讯&#xff0c;公司再次斩获国家发明专利授权。这项名为"一种超大规模分布式集群架构的数据处理方法"的专利&#xff08;专利号&#xff1…

html+canvas 实现签名功能-手机触摸

手机上的效果图 需要注意&#xff0c;手机触摸和鼠标不是一个事件&#xff0c;不能通用&#xff0c;上一篇是关于使用鼠标的样例 相关代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewpo…

[Vulnhub] MERCY SMB+RIPS-LFI+Tomcat+Ports-Knocking+Timeclock权限提升

信息收集 IP AddressOpening Ports192.168.101.151TCP:80,22,53, 110, 139, 143, 445, 993, 995, 8080 $ $ nmap -p- 192.168.101.151 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 53/tcp open domain ISC BIND 9.9.5-3ubuntu0.17 (Ubuntu Linux) …

主从复制 哨兵服务 数据类型 持久化

配置主从复制 一主多从结构 配置一主一从结构 修改配置文件 配置salve服务器 配置带验证的主从复制 查看密码&#xff0c;默认redis服务没有密码 192.168.88.61:6379> config get requirepass 设置密码 192.168.88.61:6379> config set requirepass 123456 输入密码…

分享一个 .NET EF 6 扩展 Where 的方法

前言 Entity Framework 6&#xff08;EF 6&#xff09;中的 Where 方法用于筛选数据库中的数据并返回符合条件的结果&#xff0c;但 Where 方法只能进行简单的筛选条件&#xff0c;例如相等、大于、小于等简单条件&#xff0c;如果需要处理更复杂的逻辑条件&#xff0c;则需要…

【Linux服务器Java环境搭建】011在linux中安装Nginx,以及停止或启动Nginx服务

系列文章目录 【Linux服务器Java环境搭建】 前言 又到了周五晚上了&#xff0c;最近工作上有些忙&#xff0c;忙于一个需求频繁变更的项目&#xff0c;都快吐血了&#xff0c;懂得都懂&#xff0c;哈哈&#xff0c;正好有时间了&#xff0c;继续写系列【Linux服务器Java环境搭…

我去,怎么http全变https了

项目场景&#xff1a; 在公司做的一个某地可视化项目。 部署采用的是前后端分离部署&#xff0c;图片等静态资源请求一台minio服务器。 项目平台用的是http 图片资源的服务器用的是https 问题描述 在以https请求图片资源时&#xff0c;图片请求成功报200。 【现象1】: 继图…

设计模式11-原型模式

设计模式11-原型模式 写在前面对象创建模式典型模式原型模式动机结构代码推导应用特点要点总结 原型模式与工厂方法模式对比工厂方法模式原型模式什么时候用什么模式 写在前面 对象创建模式 通过对象创建模式绕开动态内存分配来避免创建过程中所导致的耦合过紧的问题。从而支…

【devops】gitlab 实现cicd 实践

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

AWS服务器购买:如何选择合适的AWS云服务器

在当今数字化时代,云计算已成为企业IT基础设施的重要组成部分。作为全球领先的云服务提供商之一,亚马逊网络服务(AWS)提供了丰富多样的云服务器选项。然而,面对众多选择,如何为您的业务需求挑选最合适的AWS云服务器呢?我们结合九河云的分析来给你解答。 1. 明确业务需求 首先…

前端Vue项目中腾讯地图SDK集成:经纬度与地址信息解析的实践

在前端开发中&#xff0c;我们经常需要将经纬度信息转化为具体的地址信息&#xff0c;这对于定位、地图展示等功能至关重要。Vue作为现代前端框架的代表&#xff0c;其组件化开发的特性使得我们能够更高效地实现这一功能。本文将介绍如何在Vue项目中集成腾讯地图SDK&#xff0c…