#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
- может возникнуть проблема с неправильным именем поля
- возможно, вы не отправляете правильные данные в соответствии с типом данных.