I have Spring boot application and I can't show error message to user. Object without that data is not saved in the database and that is OK. But showing error message is the problem. When I debug i get errors size = 0
This is my model:
@Size(min = 1, message = "Address is invalid.")
@NotNull
@Column
private String address;
Controller
@RequestMapping(value = "/create", method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String createNewBusiness(@Valid @ModelAttribute("business")
Business business, BindingResult result, Model model) {
model.addAttribute("userEmail", getUserEmail());
logger.info("/business/create:" + business.toString());
LocationResponse locationResponse = geoService.getCoords(business.getAddress());
if(locationResponse.getStatus().equals("OK")) {
business.setLatitude(locationResponse.getResults().get(0).getGeometry().getLocation().getLat());
business.setLongitude(locationResponse.getResults().get(0).getGeometry().getLocation().getLng());
business.setUserId(getUserId());
businessService.createNew(business);
model.addAttribute("business", business);
}else{
business.setAddress(null);
model.addAttribute("business", business);
}
if(result.hasErrors()){
List<FieldError> errors = result.getFieldErrors();
for (FieldError error : errors ) {
System.out.println (error.getObjectName() + " - " + error.getDefaultMessage());
}
return "newBusiness";
}
return "business";
}
And Thymeleaf
<div class="input-field left m-0 w-100">
<i class="fa fa-map-marker prefix grey-text" aria-hidden="true"></i>
<input placeholder="Address" id="inputAddress" name="address" type="text" class="validate my-0" th:required="true">
<label th:errors="*{address}" th:if="${#fields.hasErrors('address')}" >Invalid address </label>
</div>
You need to use @Valid
and on some also @ModelAttribute
for the parameter of createNewBusiness()
- depending on your parameters and stuff.
Also you need to add th:field="*{adress}"
to your inputfield because it´s the ID of this inputfield in the framework.
So in you case the method header will look like this:
public String createNewBusiness(@ModelAttribute Business business,
@Valid Model model, BindingResult result) {
// ...
}
If you want to throw a custom validation error (for example, if you're validating a field by something other than the annotation validators in your model), you can do that through BindingResult#rejectValue()
method. For example:
if (business.getEmail() == null || business.getEmail().length() == 0) {
result.rejectValue("email", "email.missing", "Must enter email");
}
Obviously email field is just an example, as you would need that email field on your thymeleaf resource as well as the error field.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.