#java #json #spring-boot #jackson #http-post
#java #json #spring-boot #джексон #http-post
Вопрос:
POST-запрос Json выглядит следующим образом:
{
'title':'Star Wars: The Empire Strikes Back',
'description':'Darth Vader is adamant about turning Luke Skywalker to the dark side.',
'actors':[
{
'lastName':'Ford',
'name':'Harrison'
},
{
'lastName':'Hamill',
'name':'Mark'
}
]
}
Итак, мое приложение Spring Boot просто хочет сохранить весь этот json как класс «Film», а внутри него есть встроенный массив «Актеров». Вот модель фильма:
@Entity
public class Film {
@Id
@GeneratedValue
private long id;
private String title;
private String description;
private ArrayList<Actor> actors = new ArrayList<>();
У меня есть отдельная сущность для актера, которая выглядит аналогично:
@Entity
public class Actor {
@Id
@GeneratedValue
private long id;
private String name;
private String lastName;
Наконец, я использую аннотацию RequestBody в PostMapping в контроллере:
@PostMapping(value= "/api/film")
@ResponseStatus(HttpStatus.CREATED)
public Film addFilm(@RequestBody Film film) {
service.createFilm(film);
return film;
Проблема в том, что я всегда получаю исключение java.io.NotSerializableException, что актер не может быть сериализован. Я попытался сделать Actor статическим встроенным классом, но это ничего не изменило. У кого-нибудь есть идея, что здесь не так?
Комментарии:
1. Вы пытались установить какую-либо связь между фильмом и актером?
2. Ну, фильм содержит список действующих лиц. В ответ я хочу то же самое, что и мой запрос, за исключением уникального идентификатора, сгенерированного для каждого фильма или актера
Ответ №1:
Ваш класс Actor должен реализовать Serializable.
@Entity
public class Actor implements Serializable{
@Id
@GeneratedValue
private long id;
private String name;
private String lastName;
Комментарии:
1. Спасибо, это фактически избавило от ошибки! Единственное, что в id ответа для Actor всегда равно 0. Есть идеи, почему он не генерируется автоматически, как в фильме?
2. На самом деле понял это, благодаря добавлению Serializable все исправлено.