Есть проект на Spring Boot
Как мне входящие данные из формы фильтровать?
Допустим в объекте TestDTO
есть поле phone
, до валидации я хочу удалить все не числовые символы и далее валидация, как мне этого достичь?
Есть DTO объект.
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestDTO {
@Email
@NotEmpty(message = "Please provide a email")
@NotNull
private String email;
@Size(min = 10)
@NotEmpty(message = "Please provide a phone")
@NotNull
private String phone;
}
Есть конструктор с методом.
@Log4j2
@Controller
@RequiredArgsConstructor
@RequestMapping("/admin/system")
public class TestController {
@PostMapping("/contact")
public ModelAndView contactSave(
final RedirectAttributes redirectAttributes,
@Valid TestDTO testDTO,
BindingResult bindingResult,
ModelAndView model) {
log.info(testDTO);
if (bindingResult.hasErrors()) {
log.error("Form has error");
}
log.error("Form success");
return model;
}
}
Решение следующие (если есть более лучшее, пожалуйста добавьте в ответ)
Создаем класс, расширяющий PropertyEditorSupport
, далее регистрируем его в контроллоре в WebDataBinder
. Наглядно в листинге.
PhoneEditor.class - удаление всех не числовых символов
import org.springframework.stereotype.Component;
import java.beans.PropertyEditorSupport;
@Component
public class PhoneEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
if (null != text) {
// Удаляем все не числовые символы
this.setValue(text.replaceAll("[\\D]+", ""));
}
}
}
TrimEditor.class - для удаление всех пробелов
import org.springframework.stereotype.Component;
import java.beans.PropertyEditorSupport;
@Component
public class TrimEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
if (null != text) {
// Удаляем все пробелы
this.setValue(text.trim());
}
}
}
TestController.class
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import uz.gigalab.ecommerce.editor.PhoneEditor;
import uz.gigalab.ecommerce.editor.TrimEditor;
import javax.validation.Valid;
@Log4j2
@Controller
@RequiredArgsConstructor
public class TestController {
@InitBinder("contact")
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, "phone", new PhoneEditor());
binder.registerCustomEditor(String.class, new TrimEditor());
}
@PostMapping("/contact")
public ModelAndView contactSave(
@Valid @ModelAttribute("contact") TestDTO testDTO,
BindingResult bindingResult,
ModelAndView model) {
log.info(testDTO);
if (bindingResult.hasErrors()) {
log.error("Form has error");
return model;
}
log.error("Form success");
return model;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Переустановка Alarm после перезагрузки устройстваУ меня объявлен широковещательный приемник, который запускается при загрузке ОС на устройстве
В android studio при запуске эмулятора вылетает такая ошибка -
код ниже работает все отлично-непонятно другое int miles мы не задавали значений (расстояния) а задали их int dist = 252; По идее же тут вместо miles должно...