내 REST 컨트롤러에 대한 POST 요청의 유효성을 검사하려고하는데 DTO 클래스에 대한 몇 가지 속성과 유효성 검사가 있습니다.
EmployeeDTOInput.java
@Getter
@Setter
public class EmployeeDTOInput {
@NotBlank("name must not be blank!")
private String name;
@DecimalMin(value = "0.01", message = "salary must be greather than or equal to $0.01!")
private BigDecimal salary;
@NotNull("commission elegible must not be null!")
private boolean commissionElegible;
}
또한 컨트롤러에 유효한 검사기가 있어야합니다.
@PostMapping
public EmployeeDTO store(@RequestBody @Valid EmployeeDTOInput employeeDTOInput) {
// Controller logic
}
몇 가지 테스트를 작성하면서 JSON 요청 객체에이 구문이 있고 제대로 작동한다는 것을 알아 냈습니다.
{
name: 12345,
salary: "30000.50"
}
이런 종류의 요청을 거부 할 수있는 방법이 있습니까? 실제 DTO 속성에 따라 JSON 속성 유형의 100 % 일관성으로 만 수락하고 salary
, 문자열 형식 만 수락 name
하고 commissionElegible
?
application.properties에 일부 Jackson 속성을 추가하려고 시도했습니다.
spring.jackson.deserialization.fail-on-unknown-properties=true
spring.jackson.deserialization.fail-on-ignored-properties=true
spring.jackson.deserialization.fail-on-invalid-subtype=true
그리고 DTO 클래스에 대한 일부 Jackson 어노테이션 :
@Getter
@Setter
public class EmployeeDTOInput {
@JsonFormat(shape = JsonFormat.Shape.STRING)
@NotBlank("name must not be blank!")
private String name;
@JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT)
@DecimalMin(value = "0.01", message = "salary must be greather than or equal to $0.01!")
private BigDecimal salary;
@JsonFormat(shape = JsonFormat.Shape.BOOLEAN)
@NotNull("commission elegible must not be null!")
private boolean commissionElegible;
}
그러나 요청은 여전히 작동합니다.
이 '잘못된'역 직렬화를 방지하고 예외를 throw하도록 구성하는 방법이 있습니까?