JsonInclude如何仅在未分配时忽略默认值布尔值

时间:2018-12-27 16:36:35

标签: spring rest jackson

当我使用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"
        }
    ]
}

2 个答案:

答案 0 :(得分:0)

您的问题不清楚; 问题主题是问题的“主题”, 这不是问题的内容。

问题的根源:您必须学习如何计数。

说明:
boolean可能恰好包含两个值;真假。 根据我对您想问的问题的想象, 似乎您想要包含三个值的东西; 正确,错误和未设置。

使用Boolean作为adultMovie字段的类型。 Boolean是引用类型; 因此它可以具有三个值; Boolean.TRUE,Boolean.FALSE和null。

@JsonInclude(JsonInclude.Include.NON_NULL)批注配合使用, adultMovie的空值将导致不包含“ adultMovie”条目的JSON。

答案 1 :(得分:0)

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

私人布尔布尔成人电影;