Как заставить запрос содержать все атрибуты в Spring? - PullRequest
0 голосов
/ 28 апреля 2020
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = false)
public class RetailerPincodeMapping {

    @Id
    private String id;

    @NotEmpty
    @Indexed
    private Long retailerId;

    @NotEmpty
    @Indexed
    private Integer pincode;

    private boolean active;

    @NotEmpty
    private String deliveryMode;

    @CreatedDate
    private Date createdAt;

    @LastModifiedDate
    private Date lastModifiedAt;

}

В настоящее время класс определяется следующим образом. Идеальный запрос:

{
        "retailerId": 239,
        "pincode": 40061,
        "deliveryMode": "COURIER",
        "active": true
}

Предположим, что если явно установить retailerId в значение null или любое другое значение, которое не может быть проанализировано как Long, я получу ошибку (желаемое поведение), но если я пропущу атрибут вообще в запрос, чем он принимает его как ноль (нежелательный)

{
        "retailerId" : null //Throws error (desired)
        "pincode": 40061,
        "deliveryMode": "COURIER",
        "active": true
}
{
        "pincode": 40061, // Doesn't throw an error (Undesired)
        "deliveryMode": "COURIER",
        "active": true
}

Как я могу избежать этого? Я хочу, чтобы запрос не прошел, если в нем отсутствуют все необходимые атрибуты.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Как ответил М. Дейнм, вам необходимо провести дополнительную проверку не пустых полей. Вы должны использовать @NotNull:

@NotEmpty
@NotNull
@Indexed
private Long retailerId; 

JFY, сравнение различных правил проверки:

String name = null;  
@NotNull = false  
@NotEmpty = false  
@NotBlank = false  

String nam = "";  
@NotNull = true  
@NotEmpty = false  
@NotBlank = false  

String name = "  ";  
@NotNull = true  
@NotEmpty = true  
@NotBlank = false  

String name = "string"  
@NotNull = true  
@NotEmpty = true  
@NotBlank = true  
0 голосов
/ 28 апреля 2020

Полагаю, вы говорите здесь о десериализации здесь. Вы пытались использовать аннотацию @JsonInclude? Вы также можете использовать свой десериализатор: @JsonDeserialize. У вас есть @Valid аннотация к вашему параметру в слое контроллера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...