Spring MVC 路径参数及JSON参数接收

1. 路径参数接收

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

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

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

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

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

注意:

  • 如果@PathVariable中没有指定value,那么形参名要与动态路径中的动态标识相同。
  • 如果形参名与动态路径中的动态标识不相同,那么就需要在@PathVariable中指定与动态标识相同的value值。

2. json参数接收

前端传递 JSON 数据时,Spring MVC 框架可以使用 @RequestBody 注解来将 JSON 数据转换为 Java 对象。@RequestBody 注解表示当前方法参数的值应该从请求体中获取,并且需要指定 value 属性来指示请求体应该映射到哪个参数上。其使用方式和示例代码如下:

  1. 前端发送 JSON 数据的示例:

    json 复制代码
    {
      "name": "张三",
      "age": 18,
      "gender": "男"
    }
  2. 定义一个用于接收 JSON 数据的 Java 类,例如:

    java 复制代码
    public class Person {
      private String name;
      private int age;
      private String gender;
      // getter 和 setter 略
    }
  3. 在控制器中,使用 @RequestBody 注解来接收 JSON 数据,并将其转换为 Java 对象,例如:

    java 复制代码
    @PostMapping("/person")
    @ResponseBody
    public String addPerson(@RequestBody Person person) {
    
      // 在这里可以使用 person 对象来操作 JSON 数据中包含的属性
      return "success";
    }

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

    注意:

    • Java本身不支持json数据类型处理
    • 如果需要在Java中处理json数据,那就需要配置json类型处理的工具(jackson)

3 jackson配置方法

  1. springmvc handlerAdpater配置json转化器,配置类需要明确:
java 复制代码
  //TODO: SpringMVC对应组件的配置类 [声明SpringMVC需要的组件信息]
  
  //TODO: 导入handlerMapping和handlerAdapter的三种方式
   //1.自动导入handlerMapping和handlerAdapter [推荐]
   //2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载
   //3.使用@Bean方式配置handlerMapper和handlerAdapter
  @EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
  @Configuration
  @ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描
  
  //WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
  public class SpringMvcConfig implements WebMvcConfigurer {
  }
  1. pom.xml 加入jackson依赖
xml 复制代码
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.0</version>
    </dependency>

@EnableWebMvc可以帮助我们完成三件事:

  • 将handlerMapping加入到ioc容器
  • 将handlerAdapter加入到ioc容器
  • 添加jackson转化器以及jackson转化对象方法
相关推荐
WarPigs35 分钟前
Unity添加Newtonsoft.json
json
雨中飘荡的记忆42 分钟前
Spring事件机制:解耦利器与实战
spring
float_六七2 小时前
Spring AOP连接点实战解析
java·后端·spring
醇氧2 小时前
springAI学习 一
学习·spring·ai·ai编程
老华带你飞2 小时前
出行旅游安排|基于springboot出行旅游安排系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring·旅游
m0_740043733 小时前
SpringBoot快速入门01- Spring 的 IOC/DI、AOP,
spring boot·后端·spring
老华带你飞3 小时前
垃圾分类|基于springboot 垃圾分类系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
醇氧3 小时前
在 Spring Service 中使用 private final Gson gson = new Gson(); 是否安全?
java·安全·spring
默 语4 小时前
Spring-AI vs LangChain4J:Java生态的AI框架选型指南
java·人工智能·spring·ai·langchain·langchain4j·spring-ai
小花4 小时前
SpringMvc中的拦截器
java·spring·springmvc