春ブーツ:コントローラは、アカウント検証にはなりません。

OutOfMemoryErrorが発生:

私は、コントローラにバリデータの使用を達成しようとしています。二つのフィールドorigindestinationIATAコードなど3つの大文字でなければなりません。しかし、それはフィルタなしで動作し、任意の要求が受け入れられています。

バリ・インターフェースのセット:

@Documented
@Constraint(validatedBy = IATACodeValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IATACodeConstraint {
    String message() default "Invalid IATA code";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

バリデータのクラス:

public class IATACodeValidator implements ConstraintValidator<IATACodeConstraint, String> {

@Override
public void initialize(IATACodeConstraint iataCode) {
}

@Override
public boolean isValid(String codeField, ConstraintValidatorContext context) {
    return codeField != null && codeField.matches("^[A-Z]{3}+$")
            && (codeField.length() == 3);
}

基本クラス:

public class CrazyAirRequest {

    @IATACodeConstraint
    private String origin;
    @IATACodeConstraint
    private String destination;
    private String departureDate;
    private String returnDate;
    private int passengerCount;

// getters & setters

コントローラ:

@RestController
@RequestMapping("flights")
@Validated
public class BusyFlightsController {


    CrazyAirDatabase crazyAirService;
    ToughJetDatabase toughJetService;

    @Autowired
    public BusyFlightsController(CrazyAirDatabase crazyAirService, ToughJetDatabase toughJetService) {
        this.crazyAirService = new CrazyAirDatabase();
        this.toughJetService = new ToughJetDatabase();
    }


    @RequestMapping(value = "/crazy-air-response", method = RequestMethod.GET)
    public List<CrazyAirResponse> getCrazyAirResponse(
            @RequestParam("origin")  String origin,
            @RequestParam("destination")  String destination,
            @RequestParam("departureDate") String departureDate,
            @RequestParam("returnDate") String returnDate,
            @RequestParam("passengerCount") int passengerCount
    ) {
        CrazyAirRequest crazyAirRequest = new CrazyAirRequest(origin, destination, departureDate, returnDate,
                passengerCount);
        return crazyAirService.getCrazyAirResponse(crazyAirRequest);
    }
Virendra Chauhan:

あなたは直接の下に示すように、2つのフィールドのカスタムバリデータを作成せずに@Patternアノテーションを使用することができます。

@Pattern(regexp ="^[A-Z]{3}" message ="Invalid IATA code")
private String origin;
@Pattern(regexp ="^[A-Z]{3}" message ="Invalid IATA code")
private String destination;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=341437&siteId=1