面试题汇总原因:
之前面试的时候遇到一个面试题,问:都是查询接口,为什么有的人用getmapping,有的人用postmapping,当时觉得很简单,回答的结果就不说了,面试官只是摇摇头。回去后学了一下,现在整理好给大家一起讨论一下
查询接口 使用getmapping和postmapping的区别
在Spring MVC或Spring Boot框架中,@GetMapping和@PostMapping是用于定义HTTP请求处理方法的两个核心注解,分别对应于GET和POST请求方式。下面将详细介绍这两个注解的使用以及它们在查询接口中的应用。
- @GetMapping
用途: @GetMapping注解用于标记一个处理GET请求的方法。GET请求通常用于获取资源信息,无副作用,且请求参数包含在URL查询字符串中。
语法: 在控制器类(通常继承自org.springframework.web.servlet.mvc.Controller或使用@Controller注解)的方法上使用@GetMapping,并指定请求的URL路径。
@GetMapping("/api/users")
public List<User> getUsers() {
// 实现逻辑:从数据库或其他数据源查询用户列表并返回
}
示例解析:
- 上述代码定义了一个处理GET请求的查询接口,当客户端发送一个GET请求到/api/users时,该方法会被调用。
- 方法返回类型为List,表示查询结果是一个用户对象列表。
- 方法内部应实现具体的查询逻辑,如通过DAO或Repository访问数据库,或者调用其他服务获取所需数据
- @PostMapping
用途: @PostMapping注解用于标记一个处理POST请求的方法。POST请求通常用于提交数据(如表单数据、JSON对象等),可能有副作用,并且请求参数包含在请求体中。
语法: 在控制器类的方法上使用@PostMapping,并指定请求的URL路径。
@PostMapping("/api/users/search")
public List<User> searchUsers(@RequestBody UserSearchCriteria criteria) {
// 实现逻辑:根据传入的搜索条件从数据库或其他数据源查询用户列表并返回
}
示例解析:
-
上述代码定义了一个处理POST请求的查询接口,当客户端发送一个POST请求到/api/users/search时,该方法会被调用。
-
方法接收一个名为criteria的参数,该参数由@RequestBody注解修饰,表示参数值应从请求体中解析。在这个例子中,假设UserSearchCriteria是一个封装了搜索条件的Java类。
-
方法返回类型同样为List,表示查询结果是一个用户对象列表。
-
方法内部应实现基于传入的搜索条件执行查询操作。
总结:
- @GetMapping 适用于那些不需要修改服务器状态,仅用于检索数据的查询接口。请求参数通常通过URL查询字符串传递。
- @PostMapping
适用于需要提交数据(如复杂的查询条件、过滤选项等)的查询接口,尤其是当这些数据不适合放在URL查询字符串中(如数据量大、结构复杂)时。请求参数通常通过请求体(如JSON、表单数据)传递。
选择使用@GetMapping还是@PostMapping来定义查询接口,主要取决于接口的实际需求和请求数据的性质。如果查询条件简单且无副作用,通常采用GET请求;如果查询条件复杂或包含敏感信息,建议使用POST请求。