美文网首页
non-static inner classes like th

non-static inner classes like th

作者: 一介书生独醉江湖 | 来源:发表于2022-06-15 10:40 被阅读0次
问题描述 :
TestController、RequestVo两个类;
在调用TestController.test类时,出现异常:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 
Cannot construct instance of `com.example.favoritecode.vo.RequestVo$FileInfo`: 
non-static inner classes like this can only by instantiated using default, no-argument constructor

百度翻译了下:
像这样的非静态内部类只能通过使用默认的无参数构造函数进行实例化;

解决思路:要么将内部类改成静态类,要么将内部类独立出来;
错误代码如下:
import com.example.favoritecode.vo.RequestVo;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

@ApiSort(1)
@Api(value = "测试接口", tags = "测试接口")
@RestController
@RequestMapping("/v1/api/test")
public class TestController {

    @ApiOperation(value = "测试", notes = "测试", produces = "application/json")
    @PostMapping(value = "test", produces = {"application/json;charset=UTF-8"})
    public String test(@RequestBody @Valid RequestVo requestVo , BindingResult results) {
        System.out.println("成功进入接口");
        return "成功调用";
    }
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.util.List;

@Data
@ApiModel(value = "requestVo", description = "测试 请求对象")
public class RequestVo {
    /**
     * 名字
     */
    @NotNull(message = "名字不能为空")
    @ApiModelProperty(value="名字", example="张三", notes="名字")
    private String name;

    /**
     * 文件信息
     */
    @NotNull(message = "文件信息不能为空")
    @ApiModelProperty(value="文件信息", example="", notes="文件信息")
    private List<FileInfo> evidMemberInfoList;

    /**
     * 文件信息
     */
    @Data
    public class FileInfo{
        /**
         * 文件每行数据的集合
         */
        @NotNull(message = "文件每行数据的集合不能为空")
        @ApiModelProperty(value="文件每行数据的集合", example="", notes="文件每行数据的集合")
        private List<String> lineList;

        /**
         * 文件id不能为空
         */
        @NotNull(message = "文件id不能为空")
        @ApiModelProperty(value="文件id", example="7236ef409b0a4dcd934560e21851068b", notes="文件id")
        private String fileId;
    }
}
解决方式一、将内部类改成静态类
# 将上面的FileInfo类直接加上 static即可;
    /**
     * 文件信息
     */
    @Data
    public static class FileInfo{
        ......
    }
解决方式二、将内部类独立出来
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ApiModel(value = "fileInfo", description = "测试 请求对象")
public class FileInfo {
    /**
     * 文件每行数据的集合
     */
    @NotNull(message = "文件每行数据的集合不能为空")
    @ApiModelProperty(value="文件每行数据的集合", example="", notes="文件每行数据的集合")
    private List<String> lineList;

    /**
     * 文件id不能为空
     */
    @NotNull(message = "文件id不能为空")
    @ApiModelProperty(value="文件id", example="7236ef409b0a4dcd934560e21851068b", notes="文件id")
    private String fileId;
}
# 两种方式,控制台都打印:
成功进入接口

相关文章

网友评论

      本文标题:non-static inner classes like th

      本文链接:https://www.haomeiwen.com/subject/cvpzmrtx.html