Wie kann ich eine neue Validierungsregel hinzufügen, ohne dass sich dies auf andere und übergeordnete Felder auswirkt?
Posted: 22 Dec 2024, 16:35
Ich habe eine Klasse PojoB, die einen Feldcode und ein Feld der Klasse PojoA enthält:
@Data
public class PojoB {
@Size(min = 1, max = 5)
@NotBlank()
@Pattern(regexp = "[0-9]+")
private String code;
@Valid
private PojoA pojoA;
}
@Data
public class PojoA {
@Size(min = 1, max = 5)
@NotBlank()
@Pattern(regexp = "[0-9]+")
private String code;
}
Und PojoB wird als Anforderungstext von /testSpringValidation1 verwendet, Validierungen sind aktiviert.
Nun zum Neuen API /testSpringValidation2, der pojoA.code kann mehr Zeichen zulassen und keine Änderung/Unterschied bei anderen Validierungsregeln im Vergleich zu /testSpringValidation1. Daher wird @Pattern(regexp = "[0-9a-z]+", groups = LessValidation.class) hinzugefügt. Aber wie kann ich es implementieren, ohne vorhandenen Code zu ändern?
public interface LessValidation extends Default {
}
@PostMapping("/testSpringValidation2")
public PojoB testSpringValidation2(@RequestBody @Validated({LessValidation.class}) PojoB reqBody) {
return reqBody;
}
@Data
public class PojoA {
@Size(min = 1, max = 5)
@NotBlank()
@Pattern(regexp = "[0-9]+")
@Pattern(regexp = "[0-9a-z]+", groups = LessValidation.class)
private String code;
}
Beim Auslösen der API /testSpringValidation2 durch diesen Reqbody,
{
"code":"12345",
"pojoA":{
"code": "12ab"
}
}
Ich habe diesen Fehler erhalten
error:
{
"type": "error",
"code": "400",
"details": "mandatory parameter pojoA.code is invalid: must match \"[0-9]+\""
}
Aber wenn ich LessValidation nicht als Standard erweitere, werden auch andere Validierungsregeln (wie Validierungen auf pojoB.code) übersprungen.
@Data
public class PojoB {
@Size(min = 1, max = 5)
@NotBlank()
@Pattern(regexp = "[0-9]+")
private String code;
@Valid
private PojoA pojoA;
}
@Data
public class PojoA {
@Size(min = 1, max = 5)
@NotBlank()
@Pattern(regexp = "[0-9]+")
private String code;
}
Und PojoB wird als Anforderungstext von /testSpringValidation1 verwendet, Validierungen sind aktiviert.
Nun zum Neuen API /testSpringValidation2, der pojoA.code kann mehr Zeichen zulassen und keine Änderung/Unterschied bei anderen Validierungsregeln im Vergleich zu /testSpringValidation1. Daher wird @Pattern(regexp = "[0-9a-z]+", groups = LessValidation.class) hinzugefügt. Aber wie kann ich es implementieren, ohne vorhandenen Code zu ändern?
public interface LessValidation extends Default {
}
@PostMapping("/testSpringValidation2")
public PojoB testSpringValidation2(@RequestBody @Validated({LessValidation.class}) PojoB reqBody) {
return reqBody;
}
@Data
public class PojoA {
@Size(min = 1, max = 5)
@NotBlank()
@Pattern(regexp = "[0-9]+")
@Pattern(regexp = "[0-9a-z]+", groups = LessValidation.class)
private String code;
}
Beim Auslösen der API /testSpringValidation2 durch diesen Reqbody,
{
"code":"12345",
"pojoA":{
"code": "12ab"
}
}
Ich habe diesen Fehler erhalten
error:
{
"type": "error",
"code": "400",
"details": "mandatory parameter pojoA.code is invalid: must match \"[0-9]+\""
}
Aber wenn ich LessValidation nicht als Standard erweitere, werden auch andere Validierungsregeln (wie Validierungen auf pojoB.code) übersprungen.