当前位置: 首页 > news >正文

Spring_MVC 中的 JSON 数据处理与 REST 风格开发

Spring_MVC 中的 JSON 数据处理与 REST 风格开发

一、JSON 格式参数

1. 格式布置

依赖导入

为了处理 JSON 数据,需要在项目中引入 Jackson 库,它是 Spring_MVC 默认使用的 JSON 处理工具。

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

配置类

在 Spring 配置类中启用 @EnableWebMvc 注解,以激活 Spring_MVC 的高级功能,包括 JSON 数据的自动处理。

@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class WebConfig {
}
  • @EnableWebMvc:启用 Spring_MVC 的高级功能,包括数据绑定、内容协商等。
  • @ComponentScan:指定 Spring 容器扫描的包路径,确保控制器类被正确加载。

2. JSON 数组格式

示例:接收 JSON 数组

使用 @RequestBody 注解可以接收客户端发送的 JSON 数组,并将其自动转换为 Java 对象。

@Controller
@RequestMapping("/json")
public class JsonController {@PostMapping("/so")@ResponseBodypublic String handleJsonArray(@RequestBody List<String> teachers) {System.out.println("Received teachers: " + teachers);return "{\"model\": \"springmvc\"}";}
}
  • @RequestBody:将请求体中的 JSON 数据绑定到方法参数。
  • List:接收一个字符串数组。

Postman 测试

在 Postman 中,可以将请求类型设置为 POST,并在请求体中输入 JSON 数组:

["Alice","Bob","Charlie"
]

3. JSON 引用类型

示例:接收 JSON 对象

Spring_MVC 可以自动将 JSON 对象转换为对应的 Java 类。

@PostMapping("/st")
@ResponseBody
public String handleJsonObject(@RequestBody Teacher teacher) {System.out.println("Received teacher: " + teacher.getName());return "{\"model\": \"springmvc\"}";
}
  • Teacher 类

    public class Teacher {private String name;private int age;// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
    }
    

Postman 测试

在 Postman 中,发送以下 JSON 数据:

{"name": "Alice","age": 30
}

4. JSON 引用数组类型

示例:接收 JSON 对象数组
在这里插入图片描述

Spring_MVC 也可以处理 JSON 对象数组,并将其转换为 Java 对象列表。

@PostMapping("/sf")
@ResponseBody
public String handleJsonArrayObject(@RequestBody List<Teacher> teachers) {System.out.println("Received teachers: " + teachers);return "{\"model\": \"springmvc\"}";
}

Postman 测试

在 Postman 中,发送以下 JSON 数据:

[{"name": "itcsa","id": 123},{"name": "itcsass","id": 125}
]

5. 细节讲述

@RequestBody 与 @RequestParam 的区别

  • @RequestBody:用于接收请求体中的 JSON 数据,并将其反序列化为 Java 对象。
  • @RequestParam:用于接收 URL 参数或表单数据。

示例

@PostMapping("/example")
@ResponseBody
public String example(@RequestBody User user, @RequestParam String token) {System.out.println("User: " + user.getName());System.out.println("Token: " + token);return "{\"status\": \"success\"}";
}
  • @RequestBody User user:接收 JSON 数据并转换为 User 对象。
  • @RequestParam String token:接收 URL 参数 token

二、响应类型处理

1. 返回 JSP 页面

在 Spring_MVC 中,可以直接返回 JSP 页面的名称,而无需使用 @ResponseBody

@GetMapping("/save")
public String save() {return "index.jsp";
}
  • 返回的字符串是 JSP 页面的路径,Spring_MVC 会自动解析并渲染该页面。

2. 返回纯文本

使用 @ResponseBody 注解可以返回纯文本响应。

@GetMapping("/text")
@ResponseBody
public String text() {return "This is a plain text response.";
}
  • @ResponseBody:将方法的返回值直接作为响应体返回。

3. 返回 JSON 数据

@RequestMapping("/sv")
@ResponseBody
public student sv(){System.out.println("返回json数据类型");student student = new student();student.setId(123);student.setName("智能");return student;
}

在这里插入图片描述

是通过respnsebody进行设置的,设置返回类型转换为下面设置的student的类型

数组类型的json:

@RequestMapping("/sm")
@ResponseBody
public List<student> sm(){System.out.println("返回json数据引用类型");student student = new student();student.setId(123);student.setName("智能");student student1 = new student();student1.setName("王五");student1.setId(456);List<student> students = new ArrayList<>();students.add(student1);students.add(student);return students;
}

4、@ResponseBody

类型:方法注解

作用:设置当前控制器作为返回值

三、REST 风格开发

1. REST 原理

REST(Representational State Transfer,表现层状态转换)是一种软件架构风格,用于设计网络应用程序。它强调使用 HTTP 方法(GET、POST、PUT、DELETE 等)来操作资源。

在这里插入图片描述

2. REST 风格的使用规范

示例:CRUD 操作

@RestController
@RequestMapping("/api/users")
public class UserController {@GetMappingpublic List<User> getAllUsers() {return userService.getAllUsers();}@GetMapping("/{id}")public User getUserById(@PathVariable int id) {return userService.getUserById(id);}@PostMappingpublic User createUser(@RequestBody User user) {return userService.createUser(user);}@PutMapping("/{id}")public User updateUser(@PathVariable int id, @RequestBody User user) {return userService.updateUser(id, user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable int id) {userService.deleteUser(id);}
}
  • @RestController:标记控制器为 REST 风格。
  • @GetMapping@PostMapping@PutMapping@DeleteMapping:分别用于处理 GET、POST、PUT、DELETE 请求。

3. REST 风格的注解使用场景

在这里插入图片描述

4. REST 风格的简用用法

示例:使用 @RestController@RequestMapping

@RestController
@RequestMapping("/books")
public class BookController {@GetMappingpublic List<Book> getAllBooks() {return bookService.getAllBooks();}@GetMapping("/{id}")public Book getBookById(@PathVariable int id) {return bookService.getBookById(id);}@PostMappingpublic Book createBook(@RequestBody Book book) {return bookService.createBook(book);}@PutMapping("/{id}")public Book updateBook(@PathVariable int id, @RequestBody Book book) {return bookService.updateBook(id, book);}@DeleteMapping("/{id}")public void deleteBook(@PathVariable int id) {bookService.deleteBook(id);}
}
  • @RestController:标记控制器为 REST 风格。

  • @RequestMapping(“/books”):设置控制器的基础路径。
    k updateBook(@PathVariable int id, @RequestBody Book book) {
    return bookService.updateBook(id, book);
    }

    @DeleteMapping(“/{id}”)
    public void deleteBook(@PathVariable int id) {
    bookService.deleteBook(id);
    }
    }

- @RestController:标记控制器为 REST 风格。
- @RequestMapping("/books"):设置控制器的基础路径。
- @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:简化了 HTTP 方法的注解。

相关文章:

  • 图论---最大流(Dinic)
  • Lua 第11部分 小插曲:出现频率最高的单词
  • 《MySQL 技术内幕-innoDB 存储引擎》笔记
  • 顶会招牌idea:机器学习+组合优化 优秀论文合集
  • 博物馆除湿控湿保卫战:M-5J1R 电解除湿科技如何重塑文物守护的未来
  • 服务器数据备份,服务器怎么备份数据呢?
  • 现代多核调度器的本质 调度三重奏
  • 设计模式--桥接模式详解
  • 1.1 道路结构特征
  • 驱动开发硬核特训 · Day 22(上篇): 电源管理体系完整梳理:I2C、Regulator、PMIC与Power-Domain框架
  • c++多线程初识
  • apkpure 谷歌插件 下载的apk包
  • RISC-V MCU定时器架构与低功耗设计
  • OpenStack私有云详细介绍
  • 洞悉 NGINX ngx_http_access_module基于 IP 的访问控制实战指南
  • Linux 在个人家目录下添加环境变量 如FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager“
  • 常用第三方库:shared_preferences数据持久化
  • SpringBoot知识日常巩固(一)
  • 德州仪器(TI)—TDA4VM芯片详解(1)—产品特性
  • Linux—— 版本控制器Git
  • 中青报:“爸妈替我在线相亲”,助力还是越界?
  • 长江财险一季度净亏1449.81万元,去年曾实现扭亏为盈
  • 铁路上海站迎五一假期客流最高峰,今日预计发送77万人次
  • 两部门预拨4000万元支持山西、广西、陕西做好抗旱救灾工作
  • 司法服务保障西部陆海新通道建设,最高法专门发文
  • 摩根大通任命杜峯为亚太区副主席,加码中国市场业务布局