notbugbutfeature
@notbugbutfeature
Типа вебушник

Как добавить проверку на ввод в spring boot application?

Добрый день, Хабр! У меня возникла проблема при разработке приложения на практику в университете. Делаю приложение для работы с базой данных (удаление, добавление, редактирование, просмотр). В приложение нужно добавить проверки на ввод ( когда допустим добавляю пользователя, если неправильно ввел имя(использовал цифры, больше знаков, чем прописано в БД и тд.). Но при гуглении не нашел ничего толкового и решил обратиться к вам.
СУБД: PostgreSQL
Spring Boot
Maven
Mustache

Вот для примера сущность клиента:

package com.example.karakum.persist.entity;

import com.sun.istack.NotNull;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.io.Serializable;
import java.util.List;

@Getter
@Setter
@Entity
@Table(name="Client")
public class ClientEntity implements Serializable {
private static final long serialVersionUID = 4364632587002683208L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Basic(optional = false)
@Column(name = "Client_id", unique = true, nullable = false)
private Integer clientId;

@Column(name = "client_fn")
@NotNull
private String clientFn;

@Column(name = "client_passport")
private String clientPassport;

@Column(name = "client_bank")
private String clientBank;

@Column(name = "client_banknum")
private String clientBankNum;

@Column(name = "client_sign")
private String clientSign;

/* @OneToMany(mappedBy = "client")
private List contracts;
*/
public ClientEntity() {
}

public ClientEntity(String clientFn, String clientPassport, String clientBank, String clientBankNum, String clientSign) {
this.clientFn = clientFn;
this.clientPassport = clientPassport;
this.clientBank = clientBank;
this.clientBankNum = clientBankNum;
this.clientSign = clientSign;
}
}


Вот добавление клиента в контроллер классе:

@GetMapping(value = {"/clients/add"})
public String clientAdd(Model model) {
return "clientadd";
}

@PostMapping({"/clients/add"})
public String clientEntityAdd(@RequestParam String clientfn, @RequestParam String clientpassport, @RequestParam String clientbank, @RequestParam String clientbanknum, @RequestParam String clientsign, Model model) {
ClientEntity clientEntity = new ClientEntity(clientfn, clientpassport, clientbank, clientbanknum, clientsign);
clientRepository.save(clientEntity);
return "clientadd";
}


60952f974d859867637963.jpeg
Вот так выглядит страница добавления клиента мне нужно чтобы выдавались ошибки при неверном вводе

Заранее спасибо за помощь!
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Spring
Java Software Engineer
Добрый день!
Обычно принято делать следующим образом:
1) Добавьте либу spring boot validation - https://www.baeldung.com/spring-boot-bean-validation

2) Создайте DTO. Например, если у вас есть entity User, то также создайте UserRequestDto.
Например,
UserRequestDto {
@NotBlank(message = "Name is mandatory")
String username;

@NotBlank(message = "Email is mandatory")
String email;
}


3) Валидируйте отправленные в бекенд данные (dto) при помощи вышеуказанной библиотеки и если что-то не так выбрасывайте исключение MethodArgumentNotValidException

например,
//@RestController
@Controller 
UserController {

public ResponseEntity<User> addUser( @Valid UserDto user ) {
// конвертируем UserDto -> User и в передаем в сервисный класс для сохранения
}

}


Также валидацию можно сделать на клиентской стороне средствами JavaScript или HTML.
Средствами html можно для инпутов добавить required, указать тип инпута например, <input type="email" />

P.S. Кстати, у вас в entity NotNull импортирован import com.sun.istack.NotNull;, а должно быть hibernate validator.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы