弹簧控制器,内部类作为参数

Mik*_*eev 1 java spring spring-mvc request inner-classes

我有一个Spring控制器,其方法映射到请求:

@RequestMapping(value = "/album", method = RequestMethod.POST)
public void generateAlbum(GenerateAlbumParams params, HttpServletResponse response){
...
}
Run Code Online (Sandbox Code Playgroud)

GenerateAlbumParams是一个简单的类:

@Getter
@Setter
public class GenerateAlbumParams {

    public enum Position {LEFT_TOP, LEFT_BOTTOM, RIGHT_TOP, RIGHT_BOTTOM}
    private List<SlideParams> slideParams = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

SlideParams是:

@Getter
@Setter
public class SlideParams{
    private Boolean checked = false;
    private Long id;
    private GenerateAlbumParams.Position mapLegendPosition;
    private GenerateAlbumParams.Position mapTablePosition;
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但如果我想将SlideParams作为GenerateAlbumParams的内部类:

@Getter
@Setter
public class GenerateAlbumParams {

    public enum Position {LEFT_TOP, LEFT_BOTTOM, RIGHT_TOP, RIGHT_BOTTOM}
    private List<SlideParams> slideParams = new ArrayList<>();

    @Getter
    @Setter
    public class SlideParams{
        private Boolean checked = false;
        private Long id;
        private Position mapLegendPosition;
        private Position mapTablePosition;
    }
}
Run Code Online (Sandbox Code Playgroud)

它引发了一个例外:

HTTP状态500 - 请求处理失败; 嵌套异常是org.springframework.beans.InvalidPropertyException:bean类[xxx.GenerateAlbumParams]的属性'slideParams [0]'无效:非法尝试获取属性'slideParams'引发异常; 嵌套异常是org.springframework.beans.NullValueInNestedPathException:bean类的属性'slideParams'无效[xxx.GenerateAlbumParams]:无法实例化属性类型[xxx.GenerateAlbumParams $ SlideParams]以自动增长嵌套属性路径; 嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[xxx.GenerateAlbumParams $ SlideParams]:它是一个抽象类吗?嵌套异常是java.lang.InstantiationException:xxx.GenerateAlbumParams $ SlideParams

小智 6

看起来你应该创建你的内部类,static以便它可以实例化而不需要引用外部类的任何对象(例如new GenerateAlbumParams.SlideParams()