首页 > 其他分享 >【无标题】

【无标题】

时间:2024-12-01 19:28:19浏览次数:6  
标签:String RequestParam age 无标题 参数 public name

SpringMVC接收数据

param参数接收

当形参名与URL携带参数名相同时,可以直接接收

@Controller
@ResponseBody
@RequestMapping("param")
public class ParamController {
​
    @GetMapping("data01")
    public String data01(String name, int age) {
        System.out.println("name" + name + " age" + age);
        return "name:" + name + "\nage" + age;
    }
}

@RequestParam注解

可以使用 @RequestParam 注释将 Servlet 请求参数(即查询参数或表单数据)绑定到控制器中的方法参数。

@RequestParam使用场景:

基本用法:

  • 指定绑定的请求参数名

  • 要求请求参数必须传递

  • 为请求参数提供默认值

 /**
 * 前端请求: http://localhost:8080/param/data?name=xx&stuAge=18
 * 
 *  使用@RequestParam注解标记handler方法的形参
 *  指定形参对应的请求参数@RequestParam(请求参数名称)
 */
@GetMapping(value="/data")
@ResponseBody
public Object paramForm(@RequestParam("name") String name, 
                        @RequestParam("stuAge") int age){
    System.out.println("name = " + name + ", age = " + age);
    return name+age;
}

默认情况下,使用此批注的方法参数是必需的,但您可以通过将 @RequestParam 批注的 required 标志设置为 false

将参数设置非必须,并且设置默认值

@GetMapping(value="/data")
@ResponseBody
public Object paramForm(@RequestParam("name") String name, 
                        @RequestParam(value = "stuAge",required = false,defaultValue = "18") int age){
    System.out.println("name = " + name + ", age = " + age);
    return name+age;
}
​

一名多值(复选框)

可以通过集合进行接收,但是必须加上@RequestParam

@GetMapping("data02")
public Object data02(@RequestParam("hbs") List<String> hobbys) {
    System.out.println("hobbys" + hobbys);
    return hobbys;
}

也可以通过实体接收

package org.lin.pojo;
​
import lombok.Data;
​
@Data
public class User {
    private String name;
    private int age;
}
​
@PostMapping("data03")
public Object data03(User user) {
    System.out.println("user" + user);
    return "ok";
}

路径参数接收

路径传递参数是一种在 URL 路径中传递参数的方式。在 RESTful 的 Web 应用程序中,经常使用路径传递参数来表示资源的唯一标识符或更复杂的表示方式。而 Spring MVC 框架提供了 @PathVariable 注解来处理路径传递参数。

@PathVariable 注解允许将 URL 中的占位符映射到控制器方法中的参数。

例如,如果我们想将 /user/{id} 路径下的 {id} 映射到控制器方法的一个参数中,则可以使用 @PathVariable 注解来实现。

下面是一个使用 @PathVariable 注解处理路径传递参数的示例:

 /**
 * 动态路径设计: /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";
}

JSON数据接收

定义实体类

package org.lin.pojo;
​
import lombok.Data;
​
@Data
public class User {
    private String name;
    private int age;
    private String gender;
}

定义控制器

@PostMapping("data04")
@ResponseBody
public Object data04(@RequestBody User user) {
    System.out.println("user" + user);
    // 在这里可以使用 person 对象来操作 JSON 数据中包含的属性
    return "success";
}

在上述代码中,@RequestBody 注解将请求体中的 JSON 数据映射到 Person 类型的 person 参数上,并将其作为一个对象来传递给 data04() 方法进行处理。

此时用postman进行测试会出现以下问题

原因:

  • 不支持json数据类型处理

  • 没有json类型处理的工具(jackson)

添加依赖

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.18.1</version>
</dependency>

在配置文件中添加注解

@EnableWebMvc // 配置json转换器

@EnableWebMvc注解效果等同于在 XML 配置中,可以使用<mvc:annotation-driven> 元素

<mvc:annotation-driven>对应的解析工作

class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
​
  public static final String HANDLER_MAPPING_BEAN_NAME = RequestMappingHandlerMapping.class.getName();
​
  public static final String HANDLER_ADAPTER_BEAN_NAME = RequestMappingHandlerAdapter.class.getName();
​
  static {
    ClassLoader classLoader = AnnotationDrivenBeanDefinitionParser.class.getClassLoader();
    javaxValidationPresent = ClassUtils.isPresent("jakarta.validation.Validator", classLoader);
    romePresent = ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", classLoader);
    jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader);
    jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
            ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
    jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);
    jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
    jackson2CborPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.cbor.CBORFactory", classLoader);
    gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader);
  }
​
​
  @Override
  @Nullable
  public BeanDefinition parse(Element element, ParserContext context) {
    //handlerMapping加入到ioc容器
    readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME, handlerMappingDef);
​
    //添加jackson转化器
    addRequestBodyAdvice(handlerAdapterDef);
    addResponseBodyAdvice(handlerAdapterDef);
​
    //handlerAdapter加入到ioc容器
    readerContext.getRegistry().registerBeanDefinition(HANDLER_ADAPTER_BEAN_NAME, handlerAdapterDef);
    return null;
  }
​
  //具体添加jackson转化对象方法
  protected void addRequestBodyAdvice(RootBeanDefinition beanDef) {
    if (jackson2Present) {
      beanDef.getPropertyValues().add("requestBodyAdvice",
          new RootBeanDefinition(JsonViewRequestBodyAdvice.class));
    }
  }
​
  protected void addResponseBodyAdvice(RootBeanDefinition beanDef) {
    if (jackson2Present) {
      beanDef.getPropertyValues().add("responseBodyAdvice",
          new RootBeanDefinition(JsonViewResponseBodyAdvice.class));
    }
  }
​

配置json转换器后测试结果如下

接收cookie与请求头数据

接收cookie

可以使用 @CookieValue 注释将 HTTP Cookie 的值绑定到控制器中的方法参数。

考虑使用以下 cookie 的请求:

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84

下面的示例演示如何获取 cookie 值:

@GetMapping("/demo")
public void handle(@CookieValue("JSESSIONID") String cookie) { 
  //...
}

接收请求头

可以使用 @RequestHeader 批注将请求标头绑定到控制器中的方法参数。

请考虑以下带有标头的请求:

Host                    localhost:8080
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language         fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding         gzip,deflate
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive              300

下面的示例获取 Accept-EncodingKeep-Alive 标头的值:

@GetMapping("/demo")
public void handle(
    @RequestHeader("Accept-Encoding") String encoding, 
    @RequestHeader("Keep-Alive") long keepAlive) { 
  //...
}

标签:String,RequestParam,age,无标题,参数,public,name
From: https://blog.csdn.net/HDLLXL/article/details/144172326

相关文章

  • 【无标题】JAVA策略模式代码例子
    在Java中,您可以使用面向对象编程中的继承和多态性来实现您的需求。首先,我们定义一个`Good`类,该类包含满减策略和打折策略。然后,我们可以让`Shoe`类和`Cloth`类继承自`Good`类。为了实现不同的折扣或满减策略,可以考虑使用策略模式。 下面是一个简单的实现示例: ###1.定义......
  • 【无标题】STM32 的中断系统
       中断概述 在主程序运行过程中, 出现了特定事件, 使得 CPU 暂停当前正在运行的程序, 转而去 处理这个事件, 等这个事件处理完成之后, CPU 再回到刚才被打断的位置继续处理, 这就 是中断。 那个打断 CPU 执行的特定事件, 我们一般称之为中断源。 被中断源打断......
  • 【无标题】
    ajaxajax快速上手constxhr=newXMLHttpRequest();//初始化//get请求xhr.open("GET","url");//当满足同源策略时可简写//发送请求xhr.send();//事件绑定xhr.onreadystatechage=function(){ if(xhr.readystate===4){//完全响应 if(xhr.state>=200&&xhr.state<3......
  • 面试官问:你如何处理与同事或上级的分歧?【无标题】
    面试官问:你如何处理与同事或上级的分歧?当面试官问你如何处理与同事或上级的分歧,其实面试官的目的是评估你的沟通技巧、冲突解决能力和团队合作的能力。在一起共事,就一定有分歧发生,有争执是正常的,关键是看如何去解决问题。考察的事候选人在面对不同意见时的态度,且能不能有效的......
  • 【无标题】
    Spring的异步任务@Async注解用于标注一个方法为异步执行。当调用这个方法时,Spring会启动一个新线程来执行该方法,而调用者不必等待其执行完成。通过@EnableAsync注解启用Spring的异步功能。这个注解通常标注在配置类上。异步方法可以返回void类型Future<T>类型:用于......
  • 【无标题】
    系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据......
  • 【无标题】高等数学
     第一章 函数与极限    第一节 映射与函数       一、集合          1.集合概念            集合是数学中的一个基本概念,我们先通过例子来说明这个概念。例如,一个书柜中的书构成一个集合,一间教室......
  • 【无标题】摩羯台风来袭:自然界的力量,人类的应对与坚韧
    摩羯台风,这是一个令人畏惧的自然力量的名字,也是近年来频繁出现的台风之一。每当摩羯台风登陆,无论是在大陆还是岛屿,都会带来强烈的风雨和破坏性的影响。而且,摩羯台风往往伴随着巨大的海浪和潮汐,给沿海地区带来了巨大的灾害。为什么摩羯台风的威力如此之大?首先,摩羯台风的风速非......
  • 【无标题】
    单选题第11/60题自动跳下一题0以下哪份代码可以实现下图Grid布局A.通过设置不同Gridltem的宽度//xxx.ets@Entry@ComponentstructGridExample3{numbers:String[]■['0','1','2','3','4','5','6','7','......
  • 【无标题】
    第60/60题一个应用通常会包含多种功能,将不同的功能特性按模块米划分和管理是-种良好的设计方式。在开发过程中,我们可以将每个功能模块作为一个独立的Module进行开发,下面关于Module的说法正确的是口A.entry类型的Module,是应用的主模块,-个应用只能包含唯一--一个entry类......