You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson:是否存在批量标记类所有成员为必填的注解方式?

更简洁的方式标记User类所有成员为必填

针对你的需求,有几种更简洁的实现方式,不用给每个属性单独加@JsonProperty(required = true):

1. 利用final属性+构造器注入(结合Jackson的@JsonCreator)

将所有属性设为final,并通过带参数的构造器初始化,配合Jackson的@JsonCreator注解,Jackson会自动将这些构造器参数视为必填项,反序列化时必须提供对应的属性:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

class User {
    private final String email;
    private final String name;
    private final String username;

    @JsonCreator
    public User(
            @JsonProperty("email") String email,
            @JsonProperty("name") String name,
            @JsonProperty("username") String username
    ) {
        this.email = email;
        this.name = name;
        this.username = username;
    }

    // 按需添加Getter方法,或用Lombok的@Getter注解简化
    public String getEmail() { return email; }
    public String getName() { return name; }
    public String getUsername() { return username; }
}

如果引入Lombok,还能进一步省去手动编写构造器和Getter的代码:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor(onConstructor = @__(@JsonCreator))
class User {
    private final String email;
    private final String name;
    private final String username;
}

2. 全局配置(Spring Boot环境下)

如果你的项目基于Spring Boot,可以通过全局Jackson配置,让所有未标记为可选的属性默认视为必填:

在application.properties中添加配置项:

# 反序列化时,缺失构造器所需属性则抛出异常
spring.jackson.deserialization.fail-on-missing-creator-properties=true
# 反序列化时,缺失Setter对应的属性则抛出异常
spring.jackson.deserialization.fail-on-missing-setters=true

这种方式是全局生效的,适合所有类都需要严格校验必填属性的场景。

3. 结合Bean Validation验证非空(针对值不为null的场景)

如果你的需求是确保属性值不为null(而非仅仅要求属性存在),可以使用Bean Validation的注解配合验证框架实现,也能简化代码:

import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
class User {
    @NotNull
    private String email;

    @NotNull
    private String name;

    @NotNull
    private String username;
}

注意:这种方式需要配合验证框架(比如Spring Validation)使用,在接收请求时触发校验,和@JsonProperty(required = true)的语义不同——前者校验值非空,后者仅校验属性必须存在(允许值为null)。

内容的提问来源于stack exchange,提问作者Gabriel Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:42:23