SpringBootパラメータチェック
7878 ワード
フロントエンドでデータを検証する場合でも、ユーザーがブラウザを迂回してHTTPツールを通じて直接バックエンドに違法なデータを要求することを避けるために、バックエンドに転送されたデータをもう一度検証します.
一、環境構築
1、依存
2、実体クラス
2.1 JSRが提供する検証注釈: である必要がある. でない必要がある. である必要がある. である必要がある. 以上の値でなければならない数字でなければならない. 以下の値でなければならない数字でなければならない. 以上の値でなければならない数字でなければならない. 以下の値でなければならない数字でなければならない. . . である必要がある. である必要がある. に適合する必要がある.
2.2 Hibernate Validatorが提供する検証注記: より大きくなければならない. である必要がある. . .
二、Controllerの入力を検証する
1.検証要求体(RequestBody)
Controller:
検証が必要なパラメータに
ExceptionHandler:
カスタム例外プロセッサは、例外をキャプチャし、簡単な処理を行うのに役立ちます.
postmanテストの使用
2.検証要求パラメータ(Path VariablesとRequest Parameters)
Controller:
クラスに@Validated注記を付けることを忘れないでください.このパラメータはSpringにメソッドパラメータを検証することを教えてくれます.(検証リクエストボディ(RequestBody)クラスに@Validatedを付ける必要はありません)
2.1 idパラメータに注記@Max(value=5、message=(「範囲外の数値サイズ」)を付けると、制限パラメータidの最大値が5になることを示します.
2.2 nameパラメータの前に注記@Size(min=1,max=5,message=(「長さは1から5の間である必要がある」)は制限パラメータnameの長さが最小で1,最大で5エンティティークラスPersonのフィールドnameの@Size(max=4)は制限フィールドnameの長さが最大で4エンティティークラスのフィールドとメソッドパラメータの両方に制限があることを示し,メソッドパラメータの優先度が高い
三、サービスの検証方法
また、コントローラレベルの入力を検証するのではなく、Springコンポーネントの入力を検証することもできます.
一、環境構築
1、依存
UTF-8
1.8
1.8
org.springframework.boot
spring-boot-starter-parent
2.1.6.RELEASE
org.projectlombok
lombok
1.18.8
org.springframework.boot
spring-boot-starter-web
2、実体クラス
import lombok.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
@Setter
@Getter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private Integer id;
@NotNull(message = "classId ")
private String classId;
@Size(max = 4)
@NotNull(message = "name ")
private String name;
/**
* :
* - ^string : string
* - string$ : string
* - ^string$ : string
* - ((^Man$|^Woman$|^UGM$)) : Man,Woman,UGM
*/
@Pattern(regexp = "((^Man$|^Woman$|^UGM$))",message = "sex ")
@NotNull(message = "sex ")
private String sex;
@Email(message = "email ")
@NotNull(message = "email ")
private String email;
}
2.1 JSRが提供する検証注釈:
@Null
注釈された要素はnull @NotNull
注釈された要素はnull @AssertTrue
注釈された要素はtrue @AssertFalse
注釈された要素はfalse @Min(value)
注釈された要素は、指定する最小値@Max(value)
注釈された要素は、指定する最大値@DecimalMin(value)
注釈された要素は、指定する最小値@DecimalMax(value)
注釈された要素は、指定する最大値@Size(max=, min=)
注釈された要素のサイズは、指定する範囲内である必要がある@Digits (integer, fraction)
注釈された要素は数値である必要があり、その値は許容範囲内である必要がある@Past
注釈された要素は、過去の日付@Future
注釈された要素は、将来の日付@Pattern(regex=,flag=)
注釈された要素は、指定された正規表現2.2 Hibernate Validatorが提供する検証注記:
@NotBlank(message =)
検証文字列はnullではなく、長さは0 @Email
注釈された要素は、電子メールアドレス@Length(min=,max=)
注釈された文字列のサイズは、指定する範囲内である必要がある@NotEmpty
注釈文字列の必須非空@Range(min=,max=,message=)
注釈された要素は、適切な範囲内である必要がある二、Controllerの入力を検証する
1.検証要求体(RequestBody)
Controller:
検証が必要なパラメータに
@Valid
注記を加え,検証に失敗するとMethodArgumentNotValidException
を放出する.Springは、デフォルトでこの例外をHTTP Status 400(エラーリクエスト)に変換します.@RestController
@RequestMapping("/api")
public class PersonController {
@PostMapping("/person")
public Person getPerson(@RequestBody @Valid Person person) {
return person;
}
}
ExceptionHandler:
カスタム例外プロセッサは、例外をキャプチャし、簡単な処理を行うのに役立ちます.
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity
postmanテストの使用
2.検証要求パラメータ(Path VariablesとRequest Parameters)
Controller:
クラスに@Validated注記を付けることを忘れないでください.このパラメータはSpringにメソッドパラメータを検証することを教えてくれます.(検証リクエストボディ(RequestBody)クラスに@Validatedを付ける必要はありません)
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Size;
@RestController
@RequestMapping("/api1")
@Validated
public class PersonController1 {
@PostMapping("/person/{id}")
public String getId(@PathVariable @Valid @Max(value = 5, message = (" ")) Integer id) {
return "id : " + id;
}
@PostMapping("/person/name")
public String getName(@RequestParam @Valid @Size(min = 1, max = 5, message = (" 1 5 ")) String name) {
return "name : " + name;
}
}
2.1 idパラメータに注記@Max(value=5、message=(「範囲外の数値サイズ」)を付けると、制限パラメータidの最大値が5になることを示します.
2.2 nameパラメータの前に注記@Size(min=1,max=5,message=(「長さは1から5の間である必要がある」)は制限パラメータnameの長さが最小で1,最大で5エンティティークラスPersonのフィールドnameの@Size(max=4)は制限フィールドnameの長さが最大で4エンティティークラスのフィールドとメソッドパラメータの両方に制限があることを示し,メソッドパラメータの優先度が高い
三、サービスの検証方法
また、コントローラレベルの入力を検証するのではなく、Springコンポーネントの入力を検証することもできます.
@Validated
と@Valid
の注釈の組み合わせを使用して、このニーズを実現することができます.@RestController
@RequestMapping("/api2")
public class PersonController2 {
@Autowired
private PersonService personService;
@PostMapping("/person")
public Person getPerson(@RequestBody Person person) {
return personService.getPerson(person);
}
}
@Service
@Validated
public class PersonService {
public Person getPerson(@Valid Person person){
return person;
}
}