Как я могу внедрить объект @RequestBody (объект значения) в слой Spring Service? - PullRequest
0 голосов
/ 01 января 2019

Как я могу внедрить объект @RequestBody (объект-значение) в слой Spring Service?

Я хочу добавить объекты (Autowired) из значений тела запроса.

HelloController

@Autowired
UserService userService;

(….)

@GetMapping("/hello")
public String hello(
        @RequestBody UserRequestBodyDto userDto,
        HttpServletResponse response){

    return null;
}

UserRequestBodyDto

@Data
public class UserRequestBodyDto{
    private String name;
    private String address;
}

UserServiceImpl

@Service
public class UserServiceImpl implements UserService{

    @AutoWired
    public UserServiceImpl(UserRequestBodyDto userDto){
      (….)
    }

}

В таком случае, как можноЯ вставляю объекты UserRequestBodyDto в слой службы?

Добавить метод setUserDto в UserService - это лучший способ?или Если преобразование dto в сущность является лучшим способом внедрения объектов, как я могу управлять многими одинаковыми классами между классом dto и классом сущности?

+ a) По моему мнению, сделать RequestScopedBean - это плохой способ.

ref: Spring: добавление @RequestBody в @ Bean

1 Ответ

0 голосов
/ 01 января 2019

Зачем вам нужно @AutoWired объект запроса?Мне кажется совершенно ненужным при выполнении операции с причиной объекта запроса, она будет меняться при каждом новом запросе.

Таким образом, вы можете выполнить операцию с объектом запроса в методе уровня обслуживания.

 public UserServiceImpl(UserRequestBodyDto userDto){
      (….)//do operation with userDto here.
 }

Или вам действительно нужно @AutoWire объект запроса, а затем объявить UserRequestBodyDto userDto в слое обслуживания с аннотацией @AutoWired.И когда метод уровня сервиса выполняется, просто установите значения this.userDto.

@Service
public class UserServiceImpl implements UserService{
    @AutoWired
    private UserRequestBodyDto userDto;

    @AutoWired
    public UserServiceImpl(UserRequestBodyDto userDto){
      this.userDto = userDto;//Here, setting value of userDto to this.userDto
    }

}
...