SpringMVC框架面试专题(初级-中级)-第九节

news/2024/11/8 16:50:07/

欢迎大家一起探讨~如果可以帮到大家请为我点赞关注哦~后续会持续更新

问题:

1.Spring MVC框架中的参数校验是什么?请举例说明如何使用参数校验。

解析:

Spring MVC框架中的参数校验是指在Controller层对用户传入的参数进行校验,确保它们符合预期的数据格式和规则要求,从而提高系统的安全性和稳定性。

Spring MVC框架中的参数校验可以使用javax.validation.constraints包中的注解来实现,这些注解提供了一些常见的数据校验规则,如@NotNull、@NotEmpty、@Size、@Pattern等。

下面是一个简单的例子,演示如何使用参数校验:

@RestController
@RequestMapping("/user")
public class UserController {@PostMapping("/add")public String addUser(@Validated @RequestBody User user) {// 业务逻辑处理return "success";}
}public class User {@NotNull(message = "用户名不能为空")private String username;@NotNull(message = "密码不能为空")private String password;@Email(message = "邮箱格式不正确")private String email;// getter和setter方法省略
}

在上面的例子中,我们使用了@Validated注解来开启参数校验,同时在User类中使用了@NotNull、@Email等注解来对字段进行校验。当用户请求Controller时,系统会自动对User对象中的字段进行校验,如果校验不通过,将会返回一个包含错误信息的响应。

需要注意的是,@Validated注解必须与@RequestBody注解一起使用,因为它们都是用来解析请求参数的。此外,如果要使用参数校验,也需要在pom.xml文件中添加相应的依赖,如下所示:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

这是因为Spring Boot默认并不包含参数校验的依赖,需要手动添加。

问题:

2.Spring MVC框架中的数据格式化是什么?请举例说明如何使用数据格式化。

解析:

Spring MVC框架中的数据格式化是指将用户提交的表单数据转换成Java对象时,对数据进行格式化处理,以满足系统要求的数据格式和类型。

数据格式化可以使用Spring自带的转换器或自定义转换器来实现,Spring自带的转换器可以处理常见的数据类型,如日期时间、数字、布尔等。如果需要处理特殊的数据类型,可以自定义转换器来实现。

下面是一个简单的例子,演示如何使用数据格式化:

@RestController
@RequestMapping("/user")
public class UserController {@PostMapping("/add")public String addUser(@RequestBody User user) {// 业务逻辑处理return "success";}
}public class User {private String username;private String email;private Date birthday;// getter和setter方法省略
}

在上面的例子中,我们定义了一个User类,其中包含了一个日期类型的字段birthday。如果用户在提交表单数据时,将日期时间以字符串形式传递过来,Spring MVC框架默认是无法将其转换成Date类型的。

为了解决这个问题,我们可以在User类中定义一个日期格式化器,如下所示:

public class User {private String username;private String email;@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;// getter和setter方法省略
}

在上面的代码中,我们使用了@DateTimeFormat注解来定义日期格式化规则,指定了日期的格式为"yyyy-MM-dd"。当用户提交表单数据时,Spring MVC框架会自动将日期字符串转换成Date类型,从而实现数据格式化的功能。

需要注意的是,如果要使用数据格式化,也需要在pom.xml文件中添加相应的依赖,如下所示:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

这是因为Spring Boot默认并不包含数据格式化的依赖,需要手动添加。

问题:

3.Spring MVC框架中的URI匹配是什么?请举例说明如何使用URI匹配。

解析:

Spring MVC框架中的URI匹配是指根据请求的URI路径来匹配相应的Controller和方法,从而实现请求的路由和处理。

URI匹配可以使用@RequestMapping注解来实现,该注解支持多种匹配模式,如精确匹配、通配符匹配、正则表达式匹配等。

下面是一个简单的例子,演示如何使用URI匹配:

@RestController
@RequestMapping("/user")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable("id") int id) {// 根据id查询用户信息return user;}@PostMapping("/")public String addUser(@RequestBody User user) {// 新增用户信息return "success";}@PutMapping("/{id}")public String updateUser(@PathVariable("id") int id, @RequestBody User user) {// 根据id更新用户信息return "success";}@DeleteMapping("/{id}")public String deleteUser(@PathVariable("id") int id) {// 根据id删除用户信息return "success";}
}

在上面的例子中,我们定义了一个UserController类,其中包含了四个方法,分别用于查询、新增、更新和删除用户信息。在类上使用@RequestMapping注解指定了统一的URI前缀"/user",而在方法上使用@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解分别指定了不同的HTTP请求方法和URI路径。

其中,@PathVariable注解用于提取URI路径中的参数值,@RequestBody注解用于提取请求体中的参数值。

需要注意的是,如果要使用URI匹配,也需要在pom.xml文件中添加相应的依赖,如下所示:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

这是因为Spring Boot默认并不包含URI匹配的依赖,需要手动添加。

问题:

4.Spring MVC框架中的请求生命周期是什么?请举例说明请求生命周期的各个阶段。

解析:

Spring MVC框架中的请求生命周期是指一个请求从发起到处理完成的整个过程,包括请求的接收、处理、返回结果等各个阶段。

下面是请求生命周期的各个阶段,以一个简单的例子来说明:

  1. 客户端向服务器发送请求,请求到达DispatcherServlet。
  2. DispatcherServlet根据请求的URI路径,选择相应的HandlerMapping将请求映射到对应的Controller方法上。
  3. HandlerAdapter将请求交给Controller方法进行处理,并返回ModelAndView。
  4. Controller方法根据请求参数和业务逻辑,完成相应的处理,并将处理结果封装在ModelAndView中返回。
  5. ViewResolver根据视图名称和请求相关的信息,选择相应的View进行渲染。
  6. View将ModelAndView中的数据渲染成HTML等格式,并返回给客户端。
  7. 客户端接收到服务器返回的响应,并进行相应的处理。

需要注意的是,上述请求生命周期的过程是一个简化的模型,实际上还包括很多细节和复杂的处理逻辑。例如,请求的过程中可能会涉及到拦截器、数据绑定、参数解析、异常处理等等,这些都是请求生命周期中的重要组成部分。

另外,Spring MVC框架还提供了很多扩展点和插件,可以根据具体的业务需求进行定制和扩展。例如,可以自定义HandlerMapping、HandlerAdapter、ViewResolver等,来实现更加灵活和高效的请求处理流程。

问题:

5.Spring MVC框架中的HandlerMethodArgumentResolver是什么?请举例说明如何使用HandlerMethodArgumentResolver。

解析:

Spring MVC框架中的HandlerMethodArgumentResolver是一种用于解析请求参数的机制,它可以自定义参数解析器来支持更加灵活和复杂的参数类型。

HandlerMethodArgumentResolver接口定义了三个方法:

  1. boolean supportsParameter(MethodParameter parameter):判断当前参数是否支持解析。
  2. Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory):根据请求和参数信息,解析参数并返回相应的值。
  3. Class<?> supportsParameter():返回当前参数解析器支持的参数类型。

下面是一个简单的例子,演示如何使用HandlerMethodArgumentResolver:

@RestController
@RequestMapping("/user")
public class UserController {@PostMapping("/add")public String addUser(@RequestParam("username") String username, @RequestParam("age") int age, @RequestParam("address") Address address) {// 业务逻辑处理return "success";}
}public class Address {private String city;private String street;// getter和setter方法省略
}

在上面的例子中,我们定义了一个UserController类,其中包含了一个addUser方法,该方法接收三个参数,分别为字符串类型的username、整型的age和自定义类型的Address。

为了支持自定义类型的Address参数,我们可以自定义一个HandlerMethodArgumentResolver来解析该参数,如下所示:

public class AddressHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter parameter) {return Address.class.equals(parameter.getParameterType());}@Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {String city = webRequest.getParameter("city");String street = webRequest.getParameter("street");Address address = new Address();address.setCity(city);address.setStreet(street);return address;}
}

在上面的代码中,我们自定义了一个AddressHandlerMethodArgumentResolver类,实现了HandlerMethodArgumentResolver接口,重写了supportsParameter和resolveArgument两个方法。

其中,supportsParameter方法用于判断当前参数是否为Address类型,resolveArgument方法则根据请求中的参数值,构造一个Address对象并返回。

最后,我们需要在WebMvcConfigurer中注册自定义的HandlerMethodArgumentResolver,如下所示:

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(new AddressHandlerMethodArgumentResolver());}
}

在上面的代码中,我们实现了WebMvcConfigurer接口,重写了addArgumentResolvers方法,将自定义的AddressHandlerMethodArgumentResolver添加到参数解析器列表中。

这样,在用户发起请求时,Spring MVC框架会自动根据参数类型和自定义的HandlerMethodArgumentResolver,来解析请求参数并构造相应的Java对象。


http://www.ppmy.cn/news/99803.html

相关文章

Shell脚本break和continue语句应用

记录&#xff1a;436 场景&#xff1a; Shell脚本break和continue语句应用。在for、while循环中使用break和continue语句。 版本&#xff1a;CentOS Linux release 7.9.2009。 1.break和continue语句 break语句用来结束循环语句&#xff0c;会跳出循环&#xff0c;不再执行…

【C++】——vector的介绍及模拟实现

文章目录 1. 前言2. vector的介绍3. vector的常用接口3.1 vector对象的常见构造函数3.2 iterator的使用3.3 vector的空间管理3.4 vector的增删查改 4. vector迭代器失效的问题4.1 底层空间改变的操作4.2 指定位置元素的删除操作 5. vector模拟实现6. 结尾 1. 前言 上一篇文章我…

springboot3.0集成nacos2.2.1(一)

本章节内容是没有开启nacos校验方式进行接入 集成环境&#xff1a; java版本&#xff1a;JDK17 springboot版本&#xff1a;3.0.2 创建spring项目&#xff0c;我这里用到的是spring-cloud全家桶 首先是jar包依赖&#xff1a; <properties><maven.compiler.so…

【Linux】软件包管理器/编辑器/yum是应用商店?/vim编辑器什么?

本文思维导图&#xff1a; 文章目录 Linux软件安装关于Linux的软件生态 1.Linux软件包管理器&#xff1a;yum到底是什么关于yum指令&#xff1a;关于yum源 2. rzsz指令1. Linux编辑器——vim编辑器vim编辑器的三种主要模式vim编辑器命令模式常用快捷键&#xff1a;vim操作总结…

maven依赖选择策略(依赖调解)

这里先抛出结论 最短路径原则: 不同级依赖, 选择路径最短&#xff08;对于传递性依赖和一级依赖&#xff09;声明优先原则 : 同级依赖,先声明的覆盖后声明的&#xff08;对于传递性依赖&#xff09;同级依赖后加载覆盖先加载原则&#xff08;不属于传递性依赖的情况&#xff0…

spring(事务管理)

事物可以看做是由对数据库若干操作组成的一个单元 事务的作用就是为了保证用户的每一个操作都是可靠的&#xff0c;事务中的每一步操作都 必须成功执行&#xff0c;只要有发生异常就回退到事务开始未进行操作的状态,这些操作 要么都完成&#xff0c;要么都取消&#xff0c;从而…

7-10 算术入门之加减乘除

对于输入的两个整数&#xff0c;按照要求输出其和差积商。 输入格式: 在一行内输入两个不超过100的非负整数a和b&#xff0c;中间以一个空格间隔&#xff0c;且保证b不为0。 输出格式: 共四行&#xff0c;格式是&#xff1a; [a] [b] [ab] [a] - [b] [a-b] [a] * [b] [a…

Day4 计算糖果、进制转换

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C/C相关题解 &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 16.11.17 文章目录 选择题1、C函数 编程题1、计算糖果2、进制转换 选择题 1、C函数 题目&#xff1a;下列程序执行后,输出的结果为…