SpringBoot - use Assert validation to make business code more concise

Pre

SpringBoot - elegant implementation of [parameter verification] advanced

SpringBoot - elegant implementation of [custom parameter verification] advanced

SpringBoot - elegant implementation of [parameter grouping verification] advanced

With the Validator framework, what do you want to do with Assert

In short, Validator only solves the data verification of parameters, but not between parameters and business data

Let's take an example

/**
 * @author Small craftsman
 * @version 1.0
 * @mark: show me the code , change the world
 */

@RestController
@Slf4j 
@RequestMapping("/assert")
public class ArtisanController {

    @Autowired
    private ArtisanDao artisanDao;

    /**
     * Validator It only solves the data verification of the parameter itself, but cannot solve the verification between the parameter and the business data
     *
     * @param
     * @return
     */
    @PostMapping("/testNoAssert")
    public void testNoAssert(@RequestParam("artisanId") String artisanId) {
        Artisan artisan = artisanDao.selectArtisanReturnNull(artisanId);

        if (artisan == null) {
            throw new IllegalArgumentException("user does not exist");
        }

    }

}
    

We are all familiar with non empty judgment

What about Assert?

    /**
     * Validator It only solves the data verification of the parameter itself, but cannot solve the verification between the parameter and the business data
     *
     * @param
     * @return
     */
    @PostMapping("/testWithAssert")
    public void testWithAssert(@RequestParam("artisanId") String artisanId) {
        Artisan artisan = artisanDao.selectArtisanReturnNull(artisanId);

        Assert.notNull(artisan, "User does not exist( Assert (thrown)");

    }

Do you find that Assert code is more elegant and concise, and can also achieve results

Assert assertion basically replaces the traditional if judgment, reduces the number of code lines for business parameter verification, improves program readability, and likes it~~~

Everyone is using it. Just look for it. I don't believe you see

[return result]

Let's see

The thrown exception is IllegalArgumentException, so handle the global exception

    /**
     * Assert abnormal
     */
    @ExceptionHandler({IllegalArgumentException.class, IllegalStateException.class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResponseData<String> exception(IllegalArgumentException e) {
        return ResponseData.fail(ResponseCode.ILLEGAL_ARGUMENT.getCode(), e.getMessage());
    }

Of course, my return result is handled by the global exception. If there is no global exception handling, the original error will be returned

org.springframework.util.Assert

Let's take a look at the methods of asset

Simple classification

Object and type assertions

functionexplain
notNull()Assume that the object is not null
isNull()The check object is null
isInstanceOf()The check object must be an instance of another specific type
isAssignable()Inspection type

Text assertion

functionexplain
hasLength()Check that the string is not an empty string, which means that it contains at least one blank. You can use the hasLength() method
hasText()Enhance the check condition. The string contains at least one non white space character. You can use the hasText() method
doesNotContain()The check parameter does not contain a specific substring

Logical assertion

functionexplain
isTrue()If the condition is false, an IllegalArgumentException exception is thrown
state()This method is the same as isTrue, but throws an IllegalStateException

Collection and map assertions

functionexplain
Collection application notEmpty()The Collection is not null and contains at least one element
map application notEmpty()Check that the map is not null and contains at least one entry (key, value pair)

Array assertion

functionexplain
notEmpty()You can check that the array is not null and contains at least one element
noNullElements()Ensure that the array does not contain null elements

Source code

https://github.com/yangshangwei/boot2

Keywords: Spring Boot

Added by runner on Thu, 24 Feb 2022 17:11:24 +0200