首页 > 解决方案 > JsonInclude 如何仅在未分配时才忽略默认值布尔值

问题描述

当我使用 Include.NON_NULL 时,错误响应是错误的,如果我使用 Include.NON_DEFAULT,状态为 200 的响应是错误的

这就是我要找的:

状态:200 OK

{
        "adultMovie": false,
        "backdropPathMovie": "/2U3hyiVzzhYzS6j9fcdVW4mO4Uk.jpg",
        "originalLanguageMovie": "en",
        "originalTitleMovie": "Fire"
} 

状态:400

{
    "errors": [
        {
            "typeId": "FIELD_VALIDATION_ERRORS",
            "field": "idMovie",
            "message": "Invalid value of `fff` provided"
        }
    ]
}

这是我迄今为止尝试过的: 我的模型:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Movie implements Serializable {

    private static final long serialVersionUID = -3515253168981789136L;

    private boolean adultMovie;

    private String backdropPathMovie;

    private String originalLanguageMovie;

    private String originalTitleMovie;

    private Set<Error> errors;
}

状态:200 OK

{
    "adultMovie": false,
    "backdropPathMovie": "/2U3hyiVzzhYzS6j9fcdVW4mO4Uk.jpg",
    "originalLanguageMovie": "en",
    "originalTitleMovie": "Fire"
}

状态:400。验证错误

{
        "adultMovie": false, // It shouldn't show up
        "errors": [
            {
                "typeId": "FIELD_VALIDATION_ERRORS",
                "field": "idMovie",
                "message": "Invalid value of `513f` provided"
            }
        ]
}

如果我尝试:

@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public class Movie implements Serializable {

状态:200 OK

{
        "backdropPathMovie": "/2U3hyiVzzhYzS6j9fcdVW4mO4Uk.jpg",
        "originalLanguageMovie": "en",
        "originalTitleMovie": "Fire"
} // Here should show up "adultMovie": false, as this field is set as false. 

状态:400。验证错误

{
    "errors": [
        {
            "typeId": "FIELD_VALIDATION_ERRORS",
            "field": "idMovie",
            "message": "Invalid value of `fff` provided"
        }
    ]
}

标签: springrestjackson

解决方案


相反,您可以使用布尔值,如下所示。布尔值的值为真或假,如果未设置,则默认值为假。因此,使用 @JsonInclude(JsonInclude.Include.NON_DEFAULT) 即使您手动设置了 false 值,它也会假定它是默认值,并且即使您需要此值作为响应,也会忽略此值。另一方面,布尔值具有三个值,例如 true、false 和 null。因此,如果您将其设置为 false,它也会在响应中考虑。仅当您设置为 null 时,它才会包含在响应中。

私人布尔成人电影;


推荐阅读