#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()