引自免费微信小程序:皆我百晓生
在Java中,当你将一个非静态内部类(nested class)作为方法参数、返回值类型或者字段类型时,你需要将其声明为静态(static)。这是因为非静态内部类默认具有对外部类的隐式引用,这会导致它们依赖于外部类的一个实例。然而,在JSON序列化和反序列化的过程中,Jackson库(或其他类似的库)试图无参构造一个新的对象实例,但对非静态内部类来说,它需要外部类的一个实例才能被创建。
为了使Jackson能够正确地处理此类情况,我们需要将其转换为静态内部类。这样,静态内部类不再依赖于外部类的实例,并且可以使用无参构造函数创建对象,符合Jackson的要求。以下是修改后的代码示例:
import jakarta.validation.constraints.*;
import java.util.List;
public class InnerparamParam {
@NotNull(message = "id不能为空")
private Long id;
private Integer sex;
@NotEmpty(message = "approvalUsers不能为空")
private List<ApprovalUser> approvalUsers;
@Valid
@Data
public static class ApprovalUser {
@NotNull(message = "-id不能为空")
private Long id;
@NotBlank(message = "姓名不能为空")
private String name;
}
}
在这个例子中,我将ApprovalUser类声明为静态的,这样Jackson就能正确地进行反序列化了。同时,如果你使用Lombok注解,记得导入正确的包,这里我已经改成了jakarta validation约束和Lombok的@Data注解。如果你使用的是Java Bean风格的getter和setter,那么不需要额外的注解。现在,这个类应该可以作为请求参数正常工作了。