OutOfMemoryErrorが発生:
私は、コントローラにバリデータの使用を達成しようとしています。二つのフィールドorigin
とdestination
IATAコードなど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;