记录一下自己的傻瓜bug日常。
今天在写controller接收vo时,为了懒得新建一个类文件直接在用于接收请求的vo类中写多了一个内部类用于接收额外的对象信息。在调试过程中出现无法对json对象的转换接收,报了一个实例化失败错误
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `InoutFeeCreateByTemplateVo$Affiliate`:non-static inner classes like this can only by instantiated using default, no-argument constructor.
错误信息也是很明显了,我的内部类少了static关键字修饰,不能通过静态创建所以导致实例化失败。
将内部类声明为public static class即可。
示例:
import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import java.util.List; /** * @author hyperion * @date 2021/11/11 19:40 * <p> * 模板生成费用单请求体 */ @Data public class InoutFeeCreateByTemplateVo { @ApiModelProperty(value = "总公司编号", required = true) @NotBlank private String parentCompCode; @ApiModelProperty(value = "关联方类型 1:供应商 2:客户", required = true) @NotBlank(message = "关联方类型不能为空") private String affiliateType; @ApiModelProperty(value = "开单日期", required = true) @Size(max = 10, message = "开单日期长度不能大于10") @NotBlank(message = "开单日期不能为空") private String billingDate; @ApiModelProperty(value = "费用模板id", required = true) @NotBlank(message = "费用模板id不能为空") private String templateId; @ApiModelProperty(value = "关联方数组", required = true) @Size(min = 1, message = "关联方数组长度不能小于1") @Valid private List<Affiliate> affiliateIdList; @Data public static class Affiliate { @ApiModelProperty(value = "关联方id") @NotBlank(message = "关联方id不能为空") String affiliateId; @ApiModelProperty(value = "关联方名称") @NotBlank(message = "关联方名称不能为空") String affiliateName; } }
ps:@Data 是lombok的引用,省去了getter,setter
内部类的实例化是通过外部类对内部类实例,即Demo.new InnerDemo(); 或者重写一下外部类的构造方法,增加内部类的实例化。
浙公网安备 33010602011771号