Неверный запрос 400 при попытке получить всех пользователей. Dto и форма

#java #spring #spring-boot #rest

Вопрос:

У меня есть REST api с пользовательской моделью — DTO и формой создания / обновления. Моя служба пользователей проверяет, является ли пользователь администратором, а затем разрешает получать всех пользователей в списке. Когда я хочу получить всех пользователей, я получаю неверный запрос 400, но он должен вернуться Запрещенным. Раньше это работало, но когда я добавил некоторые изменения в свой код, я получил неверный запрос. Я не знаю, чего мне не хватает…

Мой User.java

 ///Lombok annotations
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Setter(AccessLevel.NONE)
    @Column(unique = true)
    private Long id;

    @Setter(AccessLevel.NONE)
    @EqualsAndHashCode.Include
    @Column(nullable = false, unique = true)
    private UUID uuid = UUID.randomUUID();

    @Column(unique = true, nullable = false, length = 254)
    private String login;
    @Column(nullable = false, length = 254)
    private String firstName;
    @Column(nullable = false, length = 254)
    private String lastName;
    @Enumerated(EnumType.STRING)
    private RoleType roleType;
    @Column(nullable = false, length = 254)
    private String password;
    @Email
    @Column(nullable = false, length = 254)
    private String email;
    @Positive
    private Double cost;

    public User(String login, String firstName, String lastName, RoleType roleType, String password,
                String email, Double cost) {
        this.login = login;
        this.firstName = firstName;
        this.lastName = lastName;
        this.roleType = roleType;
        this.password = password;
        this.email = email;
        this.cost = cost;
    }
 

Пользовательский контроллер

 @GetMapping("users")
    public ResponseEntity<List<UserDto>> getAllUsers(@RequestParam UUID uuid) {
        return userService.getListResponseEntity(uuid);
    }
 

Обслуживание пользователей

 public ResponseEntity<List<UserDto>> getListResponseEntity(UUID adminUuid) {
        if (authService.adminAuth(adminUuid)) {
            List<User> users = userRepo.findAll();
            List<UserDto> userDto = users
                    .stream()
                    .map(user -> userMapper.mapToUserDto(user))
                    .collect(Collectors.toList());

            return new ResponseEntity<>(userDto, HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.FORBIDDEN);
        }
    }
 

UserDTO

 @Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserDto {

    private String login;
    private String firstName;
    private String lastName;
    private RoleType roleType;
    private String email;
    private Double cost;
 

Комментарии:

1. Какой URL-адрес вы используете? Что говорится в журналах отладки?

2. Как выглядит ваш http-запрос? Разве просьба не очень плохая? Я думаю, что тогда код ответа на ошибку возвращается от контроллера, и программа не поступила на обслуживание.

3. локальный хост:8080/разрешен пользователями [org.springframework.web.bind. MissingServletRequestParameterException Требуемый параметр запроса ‘uuid’ для типа параметра метода UUID отсутствует]

4. Похоже, ваш URL-адрес должен быть /users?uuid=…

Ответ №1:

Я думаю, вы пропустили параметр uuid в заголовке запроса. Все будет так. http://localhost:8080/users?uuid="enter_your_uuid_here"

Комментарии:

1. Ах, я скучал по этому! Я думал, что получу запрещенное даже без параметра uuid в заголовке запроса. Спасибо

Ответ №2:

Могут быть изменения, из-за которых данные вашего запроса JSON не совпадают с вашими полями данных DTO. Проверьте следующие пункты в своем запросе JSON

  • может возникнуть проблема с неправильным именем поля
  • возможно, вы не отправляете правильные данные в соответствии с типом данных.