springtboot 接口方法提供,同时可输入两个实体类 public ResultRespone saveYhda(@RequestBody DaCustomer daCustomer,@RequestBody DaMeter daMeter)
时间: 2023-07-08 17:46:50 浏览: 58
在SpringBoot中,一个HTTP请求只能有一个请求体(RequestBody)。因此,不能在同一个请求中使用两个@RequestBody注解来接收两个实体类。但是,你可以将这两个实体类封装成一个新的实体类,然后传递这个新的实体类作为请求体。
例如,你可以创建一个名为DaCustomerAndMeter的实体类,包含DaCustomer和DaMeter实体类的属性,如下所示:
```java
public class DaCustomerAndMeter {
private DaCustomer daCustomer;
private DaMeter daMeter;
// getter 和 setter 方法
}
```
然后,在Controller中的方法参数中使用@RequestBody注解接收DaCustomerAndMeter实体类,如下所示:
```java
@PostMapping("/save")
public ResultRespone saveYhda(@RequestBody DaCustomerAndMeter daCustomerAndMeter) {
// 在方法中可以通过 daCustomerAndMeter.getDaCustomer() 获取DaCustomer实体类对象
// 通过 daCustomerAndMeter.getDaMeter() 获取DaMeter实体类对象
// 其他业务逻辑处理
}
```
这样就可以同时接收这两个实体类了。
相关问题
优化一下验证实体类参数方法 public ResultRespone saveYhda(@RequestBody DaCustomer daCustomer,@RequestBody DaMeter daMeter ) { //获取最大用户编号 Map<String ,Object> map= daCustomerMapper.selectMaxCustomerNo(); int yhbh=Integer.parseInt(map.get("CUSTOMER_NO").toString())+1; daCustomer.setCustomerNo(String.valueOf(yhbh)); daCustomer.setCustomerNoOld(String.valueOf(yhbh)); ResultRespone<Object> rest = new ResultRespone<>(); if(StringUtils.isEmpty(daCustomer.getCustomerName())) { rest.setCode(-1); rest.setMessage("用户姓名不能为空"); } if(StringUtils.isEmpty(daCustomer.getCustomerAddress())) { rest.setCode(-1); rest.setMessage("用户地址不能为空"); }
可以使用 Spring Boot 提供的校验注解来优化代码,例如使用 @NotBlank 注解进行非空校验,@Valid 注解进行校验,同时在方法参数中添加 BindingResult 对象,用于接收校验结果,从而更加清晰地处理校验结果。代码示例如下:
```
@PostMapping("/save")
public ResultRespone saveYhda(@RequestBody @Valid DaCustomer daCustomer, @RequestBody @Valid DaMeter daMeter, BindingResult bindingResult) {
//获取最大用户编号
Map<String ,Object> map = daCustomerMapper.selectMaxCustomerNo();
int yhbh = Integer.parseInt(map.get("CUSTOMER_NO").toString()) + 1;
daCustomer.setCustomerNo(String.valueOf(yhbh));
daCustomer.setCustomerNoOld(String.valueOf(yhbh));
ResultRespone<Object> rest = new ResultRespone<>();
if (bindingResult.hasErrors()) {
StringBuilder errorMsg = new StringBuilder();
bindingResult.getAllErrors().forEach(error -> {
errorMsg.append(error.getDefaultMessage()).append(";");
});
rest.setCode(-1);
rest.setMessage(errorMsg.toString());
return rest;
}
// 业务逻辑处理
return rest;
}
```
在上述代码中,@Valid 注解用于对方法参数进行校验,BindingResult 对象用于接收校验结果。如果存在校验不通过的情况,可以通过遍历 bindingResult 中的所有错误信息并拼接错误信息,最终返回错误码和错误信息。这种方式可以让代码更加简洁、易读,同时也提高了代码的可维护性。
如何使用@requestbody注解多个参数
要使用`@RequestBody`注解传递多个参数,你可以创建一个包含所有参数的实体类,并将其作为请求体的参数。以下是一个示例:
首先,创建一个包含多个参数的实体类,例如`User`:
```java
public class User {
private String name;
private int age;
// 其他参数
// 省略构造函数、getter和setter方法
}
```
然后,在控制器的方法中使用`@RequestBody`注解来接收这个实体类对象:
```java
@RestController
public class UserController {
@PostMapping("/users")
public ResponseEntity<String> createUser(@RequestBody User user) {
// 处理接收到的用户对象
// ...
return ResponseEntity.ok("User created successfully");
}
}
```
在上面的示例中,`createUser`方法使用了`@RequestBody`注解来接收一个`User`对象作为请求体。当客户端发送POST请求到`/users`路径时,请求体中的JSON数据会自动映射到`User`对象中。
你可以使用类似的方式传递多个参数。只需创建一个包含所有参数的实体类,并在控制器方法中使用`@RequestBody`注解来接收该实体类对象即可。