第十一章 框架升级之数据校验及文件上传(2023版本IDEA)


  第9~10章完成了功能的改造升级工作(如果没有了解可以去我主页看看 第一至十章的内容来学习)本章将继续对用户管理模块的其他功能进行改造,帮助同学们学习并掌握Spring MVC框架的文件上传功能,了解REST风格及JSR 303 数据验证框架等技术。

11.1 系统增、查、改功能

  增加、查询、删除(本章不涉及)、修改是Web项目的基本功能,也是开发人员涉及最多的工作。本节使用SpringMVC框架对用户模块进行升级改造。

11.1.1改造添加功能

  从用户添加功能入手,主要工作是替换控制层的实现技术,Spring MVC框架提供了接收对象入参的功能,可以直接把前端传入的参数封装到对应对象中,非常方便。

改造Java代码以添加新功能通常涉及几个关键步骤,包括需求分析、设计、编码、测试和部署。这里,我将给出一个简化的示例,说明如何在一个现有的Java类中添加一个新功能。

假设的场景
假设我们有一个简单的Calculator类,它目前支持加法和减法操作。我们的任务是给它添加一个新的功能:乘法。

现有的Calculator类

public class Calculator {
   
     
  
    // 加法  
    public int add(int a, int b) {
   
     
        return a + b;  
    }  
  
    // 减法  
    public int subtract(int a, int b) {
   
     
        return a - b;  
    }  
  
    // 这里我们将添加乘法  
}

添加乘法功能

  1. 分析需求: 需要添加一个方法,该方法接受两个整数参数并返回它们的乘积。
  2. 设计: 在Calculator类中增加一个名为multiply的方法。
  3. 编码:
public class Calculator {
   
     
  
    // 加法  
    public int add(int a, int b) {
   
     
        return a + b;  
    }  
  
    // 减法  
    public int subtract(int a, int b) {
   
     
        return a - b;  
    }  
  
    // 新增乘法  
    public int multiply(int a, int b) {
   
     
        return a * b;  
    }  
  
    // 可以在这里继续添加其他功能  
}
  1. 测试: 编写单元测试来验证新添加的multiply方法是否按预期工作。
import org.junit.jupiter.api.Test;  
import static org.junit.jupiter.api.Assertions.*;  
  
public class CalculatorTest {
   
     
  
    @Test  
    public void testMultiply() {
   
     
        Calculator calc = new Calculator();  
        assertEquals(6, calc.multiply(2, 3), "2 * 3 should be 6");  
    }  
  
    // 可以添加更多测试来验证其他方法  
}
  1. 将修改后的代码部署到生产环境(对于小型项目或学习项目,这可能意味着简单地重新编译并运行你的程序)。

注意事项

  • 代码审查: 在提交更改之前,请确保进行代码审查,以确保新添加的功能符合项目标准和最佳实践。
  • 文档更新: 更新相关的开发文档和用户文档,以反映新的功能。
  • 版本控制: 使用版本控制系统(如Git)跟踪你的更改,并确保你的更改被正确提交到存储库。
  • 测试覆盖率: 尽量为新的和现有的功能编写足够的测试用例,以确保代码的稳定性和可靠性。
    通过遵循上述步骤,你可以有效地在Java项目中添加新功能。

11.1.2 改造查询功能(REST 风格)

  用户添加功能改造完成之后,接着改造查询详情功能。在此之前,先来了解一个比较流行的API开发规范——REST。

改造REST风格的查询功能通常意味着你正在开发一个基于RESTful API的Web服务,并且需要更新或优化该服务中的查询功能。RESTful API通过HTTP请求(如GET、POST、PUT、DELETE)来操作资源,并使用无状态通信,即每个请求都应该包含执行该请求所需的所有信息。

以下是一个简化的例子,说明如何改造一个基于Spring Boot的RESTful API中的查询功能。我们将从一个简单的Book资源开始,然后添加或修改一个查询Book的端点。

假设的Book资源
首先,我们有一个Book实体类和一个BookRepository接口(使用Spring Data JPA):

// Book.java  
@Entity  
public class Book {
   
     
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Long id;  
    private String title;  
    private String author;  
    // 省略getter和setter  
}  
  
// BookRepository.java  
public interface BookRepository extends JpaRepository<Book, Long> {
   
     
    // 这里可以添加一些特定查询,例如根据作者查询  
    List<Book> findByAuthor(String author);  
}

原始的REST Controller
我们可能已经有了一个基础的REST Controller来处理对Book资源的请求:

// BookController.java  
@RestController  
@RequestMapping("/books")  
public class BookController {
   
     
  
    @Autowired  
    private BookRepository bookRepository;  
  
    // 获取所有书籍  
    @GetMapping  
    public List<Book> getAllBooks() {
   
     
        return bookRepository.findAll();  
    }  
  
    // 添加改造的查询功能  
    // ...  
}

改造查询功能
现在,我们要在BookController中添加一个新的端点,以便可以通过作者名来查询书籍。我们将使用@GetMapping注解来定义这个新的端点,并使用查询参数来传递作者名。

// 在BookController.java中添加  
  
// 根据作者名查询书籍  
@GetMapping("/by-author")  
public List<Book> getBooksByAuthor(@RequestParam String author) {
   
     
    return bookRepository.findByAuthor(author);  
}

这个新的端点/books/by-author将接受一个名为author的查询参数,并使用BookRepository中的findByAuthor方法来查询和返回具有该作者名的所有书籍。

测试改造后的查询功能
为了确保新的查询功能按预期工作,你应该编写单元测试或集成测试。然而,在这个简单的示例中,我们可以通过发送HTTP GET请求到/books/by-author?author=某作者名来手动测试它。

注意事项

  • 安全性: 在生产环境中,你可能需要确保这个查询功能是安全的,例如通过验证用户身份、限制可查询的作者等。
  • 分页和排序:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值