在 Java 中,Controller 里面调用同一个 Service 方法,但是请求参数不同,在不冗余请求体的情况下,可以使用 JavaBean 来作为请求参数的封装对象,通过在不同的 Controller 方法中对 JavaBean 对象的属性进行赋值,从而实现不同的请求参数的转换映射。具体实现可以使用 Spring 框架中的 @RequestBody@RequestParam 注解来自动绑定请求参数到 JavaBean 对象的属性中。在 Service 方法中只需要接收 JavaBean 对象作为参数即可。

例如:

@RestController
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @PostMapping("/user")
    public void addUser(@RequestBody UserAddRequest request) {
        User user = new User();
        user.setName(request.getName());
        user.setAge(request.getAge());
        userService.addUser(user);
    }
    
    @GetMapping("/user")
    public void getUser(@RequestParam("id") Long id) {
        userService.getUserById(id);
    }
}

@Service
public class UserService {
    
    public void addUser(User user) {
        // do something
    }
    
    public User getUserById(Long id) {
        // do something
    }
}

public class UserAddRequest {
    
    private String name;
    
    private Integer age;
    
    // getter and setter
}

addUser 方法中,使用 @RequestBody 注解将请求体中的 JSON 数据绑定到 UserAddRequest 对象。在 getUser 方法中,使用 @RequestParam 注解获取 URL 参数 id

通过这种方式,我们可以将不同的请求参数转换为 UserLong 对象,然后传递给 UserService 中的对应方法,从而避免冗余的请求体代码。

Java Controller 调用同一个 Service 方法,不同请求参数转换映射技巧

原文地址: https://www.cveoy.top/t/topic/mUOK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录