接口设计中,入参的对象以每个功能写个对象还是写个通用的对象,这两种方式的优缺点是什么
时间: 2023-03-23 20:04:42 浏览: 32
对于接口设计中的入参对象,写个通用的对象和每个功能写个对象都有各自的优缺点。写个通用的对象可以减少代码量,提高代码的可重用性,但是可能会导致代码的可读性和可维护性降低。每个功能写个对象可以使代码更加清晰易懂,易于维护,但是会增加代码量和重复代码的出现。因此,在实际开发中,应该根据具体情况来选择使用哪种方式。
相关问题
springboot用注解@Validated和@NotNull写一个入参对象中的参数不能为null的实例
假设我们有一个入参对象 `User`,其中包含 `name` 和 `age` 两个属性,我们要求在使用该对象作为参数的接口中,`name` 和 `age` 都不能为空。
可以使用 `@Validated` 和 `@NotNull` 注解来实现参数校验。
首先在 `User` 类中添加 `@NotNull` 注解:
```java
public class User {
@NotNull(message = "name不能为空")
private String name;
@NotNull(message = "age不能为空")
private Integer age;
// 省略getter和setter方法
}
```
然后在接口方法中添加 `@Validated` 注解,并在参数前加上 `@RequestBody` 注解:
```java
@RestController
@RequestMapping("/user")
@Validated
public class UserController {
@PostMapping("/add")
public String addUser(@RequestBody @Validated User user) {
// 处理添加用户的逻辑
return "success";
}
}
```
这样,在接口调用时,如果 `name` 或 `age` 为 `null`,就会抛出 `MethodArgumentNotValidException` 异常,并返回错误信息。
springboot用注解@Validated和@NotNull分组写一个入参对象中的参数不能为null的实例
可以使用 `@Validated` 和 `@NotNull` 注解来实现对入参对象中的参数进行非空校验,并且可以使用分组校验来对不同分组进行不同的校验。
首先,定义一个入参对象,例如:
```java
public class User {
@NotNull(groups = {Add.class, Update.class}, message = "id不能为空")
private Long id;
@NotBlank(groups = {Add.class, Update.class}, message = "用户名不能为空")
private String username;
@NotBlank(groups = {Add.class}, message = "密码不能为空")
private String password;
// 省略其他属性和方法
}
```
在上述代码中,使用了 `@NotNull` 和 `@NotBlank` 注解来对 `id`、`username` 和 `password` 进行非空校验,并且使用了分组校验来对不同分组进行不同的校验。
接着,在 Controller 层中使用 `@Validated` 注解来启用校验功能,并且在需要进行校验的入参对象前使用 `@Valid` 注解来表示需要对该对象进行校验。例如:
```java
@RestController
@RequestMapping("/user")
@Validated
public class UserController {
@PostMapping("/add")
public String addUser(@Validated(Add.class) @RequestBody User user) {
// 省略业务逻辑
return "success";
}
@PostMapping("/update")
public String updateUser(@Validated(Update.class) @RequestBody User user) {
// 省略业务逻辑
return "success";
}
}
```
在上述代码中,使用了 `@Validated(Add.class)` 和 `@Validated(Update.class)` 注解来指定不同的分组,分别对应添加用户和修改用户的场景,这样就可以根据不同的场景进行不同的校验。
最后,需要定义分组接口,例如:
```java
public interface Add {}
public interface Update {}
```
在上述代码中,定义了 `Add` 和 `Update` 两个分组接口,用来在入参对象的属性上标记需要进行校验的属性。
这样,当调用添加用户和修改用户的接口时,就会根据不同的分组进行不同的校验,从而保证了入参对象中的参数不能为 null。