Контроллер Spring с внутренним классом в качестве параметра

#java #spring #spring-mvc #request #inner-classes

#java #spring #spring-mvc #запрос #внутренние классы

Вопрос:

У меня есть контроллер Spring с методом, сопоставленным с запросом:

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

GenerateAlbumParams — это простой класс:

 @Getter
@Setter
public class GenerateAlbumParams {

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

а SlideParams это:

 @Getter
@Setter
public class SlideParams{
    private Boolean checked = false;
    private Long id;
    private GenerateAlbumParams.Position mapLegendPosition;
    private GenerateAlbumParams.Position mapTablePosition;
}
  

Все работает нормально, но если я хочу сделать 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;
    }
}
  

это приводит к исключению:

HTTP Status 500 — ошибка обработки запроса; вложенным исключением является org.springframework.beans.Исключение InvalidPropertyException: недопустимое свойство ‘slideParams[0]’ класса bean [xxx.GenerateAlbumParams]: незаконная попытка получить свойство ‘slideParams’ вызвала исключение; вложенным исключением является исключение org.springframework.beans.NullValueInNestedPathException: Недопустимое свойство ‘slideParams’ класса bean [xxx.GenerateAlbumParams]: не удалось создать экземпляр типа свойства [xxx.GenerateAlbumParams $SlideParams] для автоматического увеличения пути к вложенному свойству; вложенным исключением является org.springframework.beans.Исключение BeanInstantiationException: не удалось создать экземпляр [xxx.GenerateAlbumParams $ SlideParams]: это абстрактный класс?; вложенным исключением является java.lang.Исключение экземпляра: xxx.GenerateAlbumParams$SlideParams

Ответ №1:

Похоже, вам следует создать свой внутренний класс static , чтобы его можно было создавать без ссылки на какие-либо объекты внешнего класса (например new GenerateAlbumParams.SlideParams()