Spring REST API Validation

In Spring MVC, just annotate a @Valid on the @RequestBody to fire the validation process.

Note
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);

    }

}

References

  1. JSR 303: Bean Validation
  2. Spring Boot Ajax example

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Amit
Guest
Amit

What is the Result class?

Guest
Guest
Guest

Appears to be a bad copy/paste from the AjaxResponseBody in this example: http://www.mkyong.com/spring-boot/spring-boot-ajax-example/