深入了解SpringMvc接收数据

目录

一、访问路径(@RequestMapping)

1.1 访问路径注解作用域

1.2 路径精准(模糊)匹配

1.3 访问路径限制请求方式

1.4 进阶访问路径请求注解

1.5 与WebServlet的区别

二、接收请求数据

2.1 请求param参数

2.2 请求路径参数

2.3 请求Json数据参数格式

三、接收其它类型数据

3.1 接收cookie参数

3.2 接收请求头数据

3.3 原生Api对象操作



一、访问路径(@RequestMapping)

1.1 访问路径注解作用域

众所周知@RequestMapping注解是用于设置访问路径的,但是还需要了解其作用域。观看源码可以看到

RequestMapping可以作用在类和方法上,但是我们一般都是写在类的方法上,所以下面将举出具体例子介绍为什么会作用在类上。

案例:

@RestController
public class AppointmentController {

    @RequestMapping("/appointment/Hello")
    public String hello(){
        System.out.println("Hello");
        return  null;
    }

    @RequestMapping("/appointment/Hi")
    public String Hi(){
        System.out.println("Hi");
        return  null;
    }

    @RequestMapping("/appointment/Bonjo")
    public String Bonjo(){
        System.out.println("Hello");
        return  null;
    }
}

以上案例可以看到在一个Controller层中如果定义每一个方法路径下,都需要加上“/appointment”的父路径。当方法很多的时候就会非常麻烦,类上使用RequestMapping作用在于可以简化,类中方法的地址映射,相当于类映射/方法映射地址


1.2 路径精准(模糊)匹配

 除了前面的一些注解以外,@RequestMapping的路径有两种方式:1.模糊匹配 2.精准匹配

下面分别介绍模糊与精准匹配

1.模糊匹配

在@RequestMapping注解指定 URL 地址时,通过使用通配符,匹配多个类似的地址。

@Controller
public class ProductController {

    /**
     *  路径设置为 /product/*  
     *    /* 为单层任意字符串  /product/a  /product/aaa 可以访问此handler  
     *    /product/a/a 不可以
     *  路径设置为 /product/** 
     *   /** 为任意层任意字符串  /product/a  /product/aaa 可以访问此handler  
     *   /product/a/a 也可以访问
     */
    @RequestMapping("/product/*")
    @ResponseBody
    public String show(){
        System.out.println("ProductController.show");
        return "product show!";
    }
}

单层匹配和多层匹配:
  /*:只能匹配URL地址中的一层,如果想准确匹配两层,那么就写“/*/*”以此类推。
  /**:可以匹配URL地址中的多层。
其中所谓的一层或多层是指一个URL地址字符串被“/”划分出来的各个层次
这个知识点虽然对于@RequestMapping注解来说实用性不大,但是将来配置拦截器的时候也遵循这个规则。

2.精准路径匹配

项目中最常用的就是精准路径匹配

所谓精准路径匹配是指在@RequestMapping注解指定 URL 地址时,不使用任何通配符,按照请求地址进行精确匹配。

案例代码:

@Controller
public class UserController {

    /**
     * 精准设置访问地址 /user/login
     */
    @RequestMapping(value = {"/user/login"})
    @ResponseBody
    public String login(){
        System.out.println("UserController.login");
        return "login success!!";
    }

    /**
     * 精准设置访问地址 /user/register
     */
    @RequestMapping(value = {"/user/register"})
    @ResponseBody
    public String register(){
        System.out.println("UserController.register");
        return "register success!!";
    }

}

1.3 访问路径限制请求方式

我们常见熟悉的请求方式有几种Get、Post、Delete、Put请求,有这么多种类请求,但是我们想要一种指定的请求方式该怎么办呢?请看源码中的method。

 限制一种或者多种访问按照如下

@RestController
@RequestMapping("/vaccinum/appointment")
public class AppointmentController {

    //    TODO:通过设置参数中的方法进行限制,这里只能通过GET请求才能访问
    @RequestMapping(value = "/Hello",method = RequestMethod.GET)
    public String hello(){
        System.out.println("Hello");
        return  null;
    }
//    TODO:对于限制仅允许多个请求种类只需要使用 "{ , , ...}"花括号括起来即可
    @RequestMapping(value = "/Hi",method = {RequestMethod.POST,RequestMethod.GET})
    public String Hi(){
        System.out.println("Hi");
        return  null;
    }
}

那么如果有用户用了限制以外的访问请求方式会怎么样呢?

答:如果用户用了限制以外的请求方式就会报错---405报错

注意: 博主这里用的是springboot中的springmvc,如果只是单纯的使用springmvc构建,那么就会报错,请在所有方法上多加一个注解@ResponseBody。


1.4 进阶访问路径请求注解

前面介绍了通过method参数进行限制requestMapping的请求方式,那么是否有更简单的方式实现限制访问请求呢?其实是有的,Spring框架中提供了几种快速请求种类映射

如下:

//    限制只能用Get
    @GetMapping("对应路径")

//    限制只能用POST请求
    @PostMapping("对应路径")

//    限制只能用Delete请求
    @DeleteMapping("对应路径")

//    限制只能用Put请求
    @PutMapping("对应路径")

这几种就是常用的请求映射,和一般的设置上method方法的,其实是等价的。

//    TODO:下面两行代码是等价的
    @RequestMapping(value = "/Hi",method = RequestMethod.GET)
    @GetMapping("/Hi")
    public String Hi(){
        System.out.println("Hi");
        return  "Hi";
    }

 注意:如果使用了其中的一种注解,就不能够进行叠加使用了,如果想要叠加使用就需要回到原始的@RequestMapping并且设置参数method.{   , , , ...}


1.5 与WebServlet的区别

在使用注解@RequestMapping,并且学习过JavaWeb的同学,可能会对这个注解感到熟悉,这里的注解和Javaweb中的@WebServlet 注解似乎十分相似。那么他们有什么区别呢?

最主要的区别在于@WebServlet 其中的路径是必须加上"/"的。下面是博主JavaWeb文章中的一个案例代码,展示了@WebServlet注解中路径的配置。

而springmvc中的@RequestMapping的路径是可以不加" / " 的,这里将" / "全部去掉,再尝试能否访问到


二、接收请求数据

2.1 请求param参数

你可能对param参数并不太了解,但是其实日常上网中如果你留意到你的浏览器的地址,你会发现其实你经常有接触param这种参数。

地址?key=value&key2=value2....

例如 常见的百度:当你输入想要搜索的数据并点击确定时候,就可以看到地址栏的变化

这种就是param参数。

下面介绍param 和 json参数的比较:

  • 参数编码:

    param 类型的参数会被编码为 ASCII 码。例如,假设 name=john doe,则会被编码为 name=john%20doe。而 JSON 类型的参数会被编码为 UTF-8。

  • 参数顺序:

    param 类型的参数没有顺序限制。但是,JSON 类型的参数是有序的。JSON 采用键值对的形式进行传递,其中键值对是有序排列的。

  • 数据类型:

    param 类型的参数仅支持字符串类型、数值类型和布尔类型等简单数据类型。而 JSON 类型的参数则支持更复杂的数据类型,如数组、对象等。

  • 嵌套性:

    param 类型的参数不支持嵌套。但是,JSON 类型的参数支持嵌套,可以传递更为复杂的数据结构。

  • 可读性:

    param 类型的参数格式比 JSON 类型的参数更加简单、易读。但是,JSON 格式在传递嵌套数据结构时更加清晰易懂。

这里可以看到,虽然param的使用不如JSON数据,在于几个方面,

  • 第一是可读性较低。
  • 第二是不支持复杂的数据传输。
  • 第三,读取的参数是无序的。并不像Json一样有特定的格式。
  • 第四、Param只能存放字符串类型的数据。

综上虽然缺点比较多,但是作为程序员需要能够处理所有的数据类型。所以下面介绍如何读取Param类型数据。

1.直接取值

    @RequestMapping("Hello")
//    TODO:通过形参直接获取值
    public String hello(String name,String sex){
        System.out.println("Hello");
        return  "Hello";
    }

通过形参直接获取值,但是请注意如果使用形参获取值,那么请求的数据名称必须一 一对应才能正常接收值。

如果不对应的情况下对应的数据会为null

2.通过注解@RequestParam获取值

前面可以看到如果形参之间如果名称并不对应的情况下是无法进行接受到数据的,而springmvc就提供了注解@RequestParam,可以给对应形参起别名,使用案例如下:

    @RequestMapping("Hello")
//    TODO:通过RequestParam 给形参起别名获取参数
    public String hello(@RequestParam("name") String NAME,
                        @RequestParam("sex") String SEX){
        System.out.println("name = " + NAME + ", sex = " + SEX);
        return  "name = " + NAME + ", sex = " + SEX;
    }

可以看到正常返回了,方法中的形参都是SEX,NAME 大写的形式,而这里使用的是小写的形式。但是用了该注解需要注意以下几个点

1.使用注解后,默认对应的参数必须传递,不能为空。如果为空则会发生下面的情况

2.可以通过参数的设置实现取消默认为空的形式,即允许传递对应的数据为空的情况。在源码中可以看到对应参数。

    @RequestMapping("Hello")
//    TODO:设置不需要必须传递参数
    public String hello(@RequestParam(value = "name") String NAME,
                        @RequestParam(value = "sex",required = false) String SEX){
        System.out.println("name = " + NAME + ", sex = " + SEX);
        return  "name = " + NAME + ", sex = " + SEX;
    }

运行案例即可看到现在正常访问了

3.通过设置默认值时候,必须传递的参数就默认不需要

 直接不传递参数,直接访问路径

3.特殊情况接收值

1.一名多值:即一个key对应多个值,例如以下:

key = value1&key = value2key = value3...

对于这种多选框,提交的数据的时候一个key对应多个值,我们可以使用集合进行接收!

案例代码:

  /**
   * 前端请求: http://localhost:8080/param/mul?hbs=吃&hbs=喝
   *
   *  一名多值,可以使用集合接收即可!但是需要使用@RequestParam注解指定
   */
  @GetMapping(value="/mul")
  @ResponseBody
  public Object mulForm(@RequestParam List<String> hbs){
      System.out.println("hbs = " + hbs);
      return hbs;
  }

2.实体接收

Spring MVC 是 Spring 框架提供的 Web 框架,它允许开发者使用实体对象来接收 HTTP 请求中的参数。通过这种方式,可以在方法内部直接使用对象的属性来访问请求参数,而不需要每个参数都写一遍。下面是一个使用实体对象接收参数的示例:

定义一个用于接收参数的实体类:

public class User {

  private String name;

  private int age = 18;

  // getter 和 setter 略
}

在控制器中,使用实体对象接收,示例代码如下:

@Controller
@RequestMapping("param")
public class ParamController {

    @RequestMapping(value = "/user", method = RequestMethod.POST)
    @ResponseBody
    public String addUser(User user) {
        // 在这里可以使用 user 对象的属性来接收请求参数
        System.out.println("user = " + user);
        return "success";
    }
}

注意:在上述代码中,将请求参数name和age映射到实体类属性上!要求属性名必须等于参数名!否则无法映射!


2.2 请求路径参数

请求路径参数,可能没有听说过。其实格式类似下面

/user/name/password

上述格式的一个案例:/user/root/123456

其实就是name = root ,  password = 123456.

知道请求路径的格式了,那么应该如何进行接收呢?其实springmvc中为路径类提供了专门的注解。可以看到以下案例:

 /**
 * 动态路径设计: /user/{动态部分}/{动态部分}   动态部分使用{}包含即可! {}内部动态标识!
 * 形参列表取值: @PathVariable Long id  如果形参名 = {动态标识} 自动赋值!
 *              @PathVariable("动态标识") Long id  如果形参名 != {动态标识} 可以通过指定动态标识赋值!
 *
 * 访问测试:  /param/user/1/root  -> id = 1  uname = root
 */
@GetMapping("/user/{id}/{name}")
@ResponseBody
public String getUser(@PathVariable Long id, 
                      @PathVariable("name") String uname) {
    System.out.println("id = " + id + ", uname = " + uname);
    return "user_detail";
}

 其中有几处与之前不同,如下:

1.动态路径设计: /user/{动态部分}/{动态部分}

2.参数:参数改为了@PathVariable

实践一下:

    @RequestMapping("Hello/{name}/{sex}")
    public String hello(@PathVariable String name, @PathVariable String sex) {
        System.out.println("name = " + name + ", sex = " + sex);
        return  "name = " + name + ", sex = " + sex;
    }

注意@PathVariable 注解中的参数名称应该和@RequestMapping 中的路径变量名称保持一致。由于 Java 是大小写敏感的,因此在 @PathVariable 注解中使用大写的参数名可能会导致匹配失败。


2.3 请求Json数据参数格式

        后端在不引用其它库的情况下进行接收json数据效率会十分低下或者直接报错,因为json数据是前端的一种实体对象。而后端并不存在该实体对象,所以进行接收的时候可能会出现问题。所以为了接收json格式字符串。通常需要引入工具类或者库。这里采用了阿里巴巴的fastjson的jar包以实现接收json格式的数据。

在项目中pom.xml中引入jar包

<!--        阿里巴巴处理json的jar包-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>

fastjson的功能:

  1. 解析JSON

    • parseObject(String text):将JSON格式的字符串解析为JSONObject。
    • parseArray(String text):将JSON格式的字符串解析为JSONArray。
  2. 生成JSON

    • toJSONString(Object object):将Java对象序列化为JSON字符串。
    • toJSONString(Object object, SerializerFeature... features):支持传入序列化特性,例如SerializerFeature.PrettyFormat用于格式化输出。
  3. 序列化特性

    • SerializerFeature.PrettyFormat:格式化输出JSON。
    • SerializerFeature.WriteMapNullValue:是否输出值为null的字段。
    • SerializerFeature.WriteDateUseDateFormat:使用日期格式化输出日期。
  4. 反序列化特性

    • Feature.AllowUnQuotedFieldNames:允许非引号字段名。
    • Feature.AllowSingleQuotes:允许单引号包裹的字符串。
  5. 自定义序列化和反序列化

    • 可以通过实现特定接口或注解来实现对特定类型的自定义序列化和反序列化。
  6. 特定对象处理

    • TypeReference:用于处理泛型类型的对象。

使用fastjson接收json数据案例:

    @RequestMapping("/JsonTest")
//    TODO:通过设置响应体注解@RequestBody实现接收json数据
    public String Json(@RequestBody JSONObject jsonObject){
        System.out.println("成功接受到JSON数据");
        return  "返回接收到的JSON数据为:"+jsonObject.toJSONString();
    }

 博主这里使用APIFOX软件的json数据传输,进行传递


三、接收其它类型数据

3.1 接收cookie参数

 接收Cookie参数时候,需要确保对应的CookieName才能获取到对应的cookie。而Cookie一般通过注解@CookieValue("CookieName") 进行获取。看以下案例

// 设置cookie   
 @RequestMapping("/save")
    public String CookieTest(HttpServletResponse servletResponse){
        Cookie cookie = new Cookie("CookieTestName","AlphaMilk");
        servletResponse.addCookie(cookie);
        System.out.println("成功设置好cookie");
        return  "设置cookie成功";
    }

// 获取cookie
    @RequestMapping("/GetCookie")
    public String GetCookie(@CookieValue("CookieTestName") String value){
        return "获取到的Cookie值为"+value;
    }

进入设置,设置cookie

再进行访问cookie对应的资源


3.2 接收请求头数据

由于请求头中有许多的数据,所以这里展示接收请求HOST(Host字段通常是指代目标服务器的域名或主机名)字段的内容,其它获取方式都是同理。

而获取请求头的方式也很简单,通过注解@RequestHeader("HeadName") 即可

 案例:

    @RequestMapping("/Header")
    public String GetHead(@RequestHeader("HOST") String value){
        return "获取到的HOST值为"+value;
    }


3.3 原生Api对象操作

下表描述了支持的控制器方法参数

参数类型描述
jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse请求/响应对象
jakarta.servlet.http.HttpSession强制存在会话。因此,这样的参数永远不会为 null
java.io.InputStream, java.io.Reader用于访问由 Servlet API 公开的原始请求正文。
java.io.OutputStream, java.io.Writer用于访问由 Servlet API 公开的原始响应正文。
@PathVariable接收路径参数注解
@RequestParam用于访问 Servlet 请求参数,包括多部分文件。参数值将转换为声明的方法参数类型。
@RequestHeader用于访问请求标头。标头值将转换为声明的方法参数类型。
@CookieValue用于访问 Cookie。Cookie 值将转换为声明的方法参数类型。
@RequestBody用于访问 HTTP 请求正文。正文内容通过使用 HttpMessageConverter 实现转换为声明的方法参数类型。
java.util.Map, org.springframework.ui.Model, org.springframework.ui.ModelMap共享域对象,并在视图呈现过程中向模板公开。
Errors, BindingResult验证和数据绑定中的错误信息获取对象!

获取原生对象示例:

/**
 * 如果想要获取请求或者响应对象,或者会话等,可以直接在形参列表传入,并且不分先后顺序!
 * 注意: 接收原生对象,并不影响参数接收!
 */
@GetMapping("api")
@ResponseBody
public String api(HttpSession session , HttpServletRequest request,
                  HttpServletResponse response){
    String method = request.getMethod();
    System.out.println("method = " + method);
    return "api";
}

文章整合:

一、访问路径(@RequestMapping)

1.1 访问路径注解作用域

  • @RequestMapping注解用于定义控制器处理请求的方法,可在类级别和方法级别上使用。

1.5 路径精准(模糊)匹配

  • 可以通过@RequestMapping的value属性设置精准匹配的路径,或者通过使用ant风格的路径模式实现模糊匹配。

1.2 访问路径限制请求方式

  • @RequestMapping注解的method属性可以限制请求的HTTP方法类型,确保方法只处理特定类型的请求。

1.3 进阶访问路径请求注解

  • 除了@RequestMapping,还可以使用@GetMapping、@PostMapping、@PutMapping等注解来更直观地表达请求的HTTP方法类型。

1.4 与WebServlet的区别

  • @RequestMapping是Spring MVC的注解,而@WebServlet是Servlet 3.0规范中的注解。@RequestMapping相比@WebServlet功能更为强大,支持更多的请求映射和参数配置。

二、接收请求数据

2.1 请求param参数

  • 使用@RequestParam注解可以获取请求中的参数,并映射到方法的参数上。

2.2 请求路径参数

  • 通过@PathVariable注解可以接收RESTful风格的路径参数。

2.3 请求Json数据参数格式

  • 使用@RequestBody注解可以将请求中的JSON数据映射到方法的参数对象上。

三、接收其他类型数据

3.1 接收cookie参数

  • 使用@CookieValue注解可以获取请求中的cookie数据。

3.2 接收请求头数据

  • 通过@RequestHeader注解可以获取请求的头部信息。

3.3 原生Api对象操作

  • 可以直接使用Servlet API中的对象,如HttpServletRequest、HttpServletResponse等,来操作原生的请求和响应数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GEE】10、使用 Google 地球引擎创建图形用户界面【GUI开发】

1简介 在本模块中&#xff0c;我们将讨论以下概念&#xff1a; 用于生成图形用户界面的 GEE 对象。如何开发具有交互元素的面板。如何将地理处理元素连接到交互式元素。 2背景 在过去的十个单元中&#xff0c;我们展示了 Google Earth Engine 可以成为一种重要且高效的资源&a…

代码分析之-广东省公共资源交易平台

广东省公共资源交易平台 hex: function Xq() {return bg || (bg 1,function(e, t) {(function(n, u) {e.exports u()})(an, function() {var n n || function(u, o) {var r;if (typeof window < "u" && window.crypto && (r window.crypto)…

【差旅游记】启程-新疆哈密(1)

哈喽&#xff0c;大家好&#xff0c;我是雷工。 最近有个新疆罗布泊的项目要去现场&#xff0c;领导安排我过去&#xff0c;这也算第一次到新疆&#xff0c;记录下去新疆的过程。 01、天有不测风云 本来预定的是11月2号石家庄飞成都&#xff0c;成都转机到哈密&#xff0c;但…

数据结构----顺序栈的操作

1.顺序栈的存储结构 typedef int SElemType; typedef int Status; typedef struct{SElemType *top,*base;//定义栈顶和栈底指针int stacksize;//定义栈的容量 }SqStack; 2.初始化栈 Status InitStack(SqStack &S){//初始化一个空栈S.basenew SElemType[MAXSIZE];//为顺序…

【Java SE】类和对象(下)

接着上文 目录 6. 封装 6.1 封装的概念 6.2 访问限定符 6.3 封装扩展之包 6.3.1 包的概念 6.3.2 自定义包 6.3.3 导入包中的类 6.3.4 包的访问权限控制举例 6.3.5 常见的包 7. static成员 7.1 static修饰成员变量 ​编辑 ​编辑 7.2 static修饰成员方法 8. 代…

从0到0.01入门React | 008.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

CLIP:用文本作为监督信号训练可迁移的视觉模型

Radford A, Kim J W, Hallacy C, et al. Learning transferable visual models from natural language supervision[C]//International conference on machine learning. PMLR, 2021: 8748-8763. CLIP 是 OpenAI 在 2021 年初的工作&#xff0c;文章发表在 ICML-2021&#xff0…

Linux--gcc/g++

一、gcc/g是什么 gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Compiler&#xff09;&#xff0c;现在除了c语言&#xff0c;还支持C、java、Pascal等语言。gcc支持多种硬件平台 二、gc…

从0到0.01入门React | 001.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Codeforces Round 788 (Div. 2) E. Hemose on the Tree(树上构造)

题目 t(t<5e4)组样例&#xff0c;每次给定一个数p&#xff0c; 表示一棵节点数为的树&#xff0c; 以下n-1条边&#xff0c;读入树边 对于n个点和n-1条边&#xff0c;每个点需要赋权&#xff0c;每条边需要赋权&#xff0c; 权值需要恰好构成[1,2n-1]的排列 并且当你赋…

初阶JavaEE(17)Linux 基本使用和 web 程序部署

接上次博客&#xff1a;初阶JavaEE&#xff08;16&#xff09;博客系统&#xff08;Markdown编辑器介绍、博客系统功能、博客系统编写&#xff1a;博客列表页 、博客详情页、实现登录、实现强制登录、显示用户信息、退出登录、发布博客&#xff09;-CSDN博客 目录 Linux 基本…

【Spring Boot 源码学习】初识 SpringApplication

Spring Boot 源码学习系列 初识 SpringApplication 引言往期内容主要内容1. Spring Boot 应用程序的启动2. SpringApplication 的实例化2.1 构造方法参数2.2 Web 应用类型推断2.3 加载 BootstrapRegistryInitializer2.4 加载 ApplicationContextInitializer2.5 加载 Applicatio…

pta 验证“哥德巴赫猜想” Python3

数学领域著名的“哥德巴赫猜想”的大致意思是&#xff1a;任何一个大于2的偶数总能表示为两个素数之和。比如&#xff1a;24519&#xff0c;其中5和19都是素数。本实验的任务是设计一个程序&#xff0c;验证20亿以内的偶数都可以分解成两个素数之和。 输入格式&#xff1a; 输…

C++ 中的内存分配 -- new 与 delete

c 常用的内存分配 分配释放类别是否可以重载mallocfreeC否newdeleteC 表达式(expressions)否operator new()operator delete()c 函数是operator new[]operator delete[]c 函数&#xff08;用于数组&#xff09;是allocator<T>::allocateallocator<T>::deallocatec …

ConstraintLayout的基本用法

ConstraintLayout的基本用法 1、基线对齐——Baseline 有时候我们需要这样一个场景&#xff1a; app:layout_constraintBaseline_toBaselineOf"id/30"2、链——Chains 用于将多个控件形成一条链&#xff0c;可以用于平分空间。 <?xml version"1.0"…

Think-on-Graph:基于知识图的大型语言模型的深层可靠推理11.12

Hink-on-Graph&#xff1a;基于知识图的大型语言模型的深层可靠推理 摘要1 引言2 方法2.1图上思考2.1.1图的初始化2.1.2 探索2.1.3推理 2.2 基于关系的Think on graph 摘要 尽管大型语言模型&#xff08;LLM&#xff09;在各种任务中取得了巨大的成功&#xff0c;但它们经常与…

python类中的抽象函数,以及继承后子类的比较

抽象函数的定义方式 导包 from abs import ABCMeta,abstractmethod声明抽象类 class Area(object):abstractmethoddef area(self):pass在抽象类中&#xff0c;不用写构造函数&#xff0c;抽象类不能进行实例化 继承抽象类的子类必须将抽象类中的函数进行重写&#xff08;不重…

【Android】Android apk 逆向编译

链接&#xff1a;https://pan.baidu.com/s/14r5s9EJwQgeLK5cCb1Gq1Q 提取码&#xff1a;qdqt 解压jadx 在 lib 文件内找到 jadx-gui-1.4.7.jar 打开cmd 执行 &#xff1a;java -jar jadx-gui-1.4.7.jar示列&#xff1a;

数据代理机制

目录 前言 Object.defineProperty() 语法 第三个参数配置项 数据代理机制的实现 MVVM分层思想 前言 本文介绍Vue的数据代理机制&#xff0c;也就是通过vue实例对象来代理data对象中的属性的操作 Object.defineProperty() 在介绍vue的数据代理机制前&#xff0c;我们需要…

LLM 面试总结

溜一遍 MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview https://www.llmforce.com/llm-interview-questions MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview An interview with a language model, ChatGPT - W…