In Spring MVC, just annotate a @Valid on the @RequestBody to fire the validation process.
For complete source code, please refer to this – Spring Boot Ajax example
P.S Tested with Spring Boot 1.5.1.RELEASE (Spring 4.3.6.RELEASE)
1. JSR 303 Validation
Add JSR303 annotations on a bean.
package com.mkyong.model;
import org.hibernate.validator.constraints.NotBlank;
public class SearchCriteria {
@NotBlank(message = "username can't empty!")
String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
2. @Valid @RequestBody
A Spring REST API, the second argument Errors object will contains the validation detail.
package com.mkyong.controller;
import com.mkyong.model.AjaxResponseBody;
import com.mkyong.model.SearchCriteria;
import com.mkyong.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
import java.util.stream.Collectors;
@RestController
public class SearchController {
@PostMapping("/api/search")
public ResponseEntity<?> search(
@Valid @RequestBody SearchCriteria search, Errors errors) {
Result result = new Result();
//If error, just return a 400 bad request, along with the error message
if (errors.hasErrors()) {
// get all errors
result.setMsg(errors.getAllErrors()
.stream()
.map(x -> x.getDefaultMessage())
.collect(Collectors.joining(",")));
return ResponseEntity.badRequest().body(result);
}
List<User> users = //get users...
if (users.isEmpty()) {
result.setMsg("no user found!");
} else {
result.setMsg("success");
}
result.setResult(users);
return ResponseEntity.ok(result);
}
}
how can i validate the data type in reques body
ex. In DTO i have carType which integer, but the submitted carType in request body is String
errors.hasError() doesnot catch the error for extra fileld of an object in the Request object when doing update
What is the Result class?
Appears to be a bad copy/paste from the AjaxResponseBody in this example: https://mkyong.com/spring-boot/spring-boot-ajax-example/