Как отправить 2 разных объекта в почтальоне методом post с загрузкой Spring? - PullRequest
1 голос
/ 07 мая 2019

Я пишу функцию в контроллере, которая должна добавить объект 'Post' в свойство другого объекта 'Topic', который является массивом. Параметры, необходимые для этой функции: «Post» (p) и id (topicID) «Topic». Я хочу знать, как отправить их в Почтальон.

Когда я пытаюсь отправить их, заполнив все параметры 'Post' + topicID 'Topic' в Postman, я получаю сообщение об ошибке, как показано ниже.

Функция в контроллере:

@RestController
@RequestMapping("/TopicController")
public class TopicController {
    @Autowired
    TopicRepository topicRepository;
    @Autowired
    PostRepository postRepository;

@RequestMapping(method = RequestMethod.POST, value = "/AddPost")
    public void addPost(Post p, @RequestParam(value="topicID") int topicID) {
        if (topicRepository.existsById(topicID)) {
            Optional<Topic> ot = topicRepository.findById(topicID);
            Topic t = ot.get();
            t.addPost(p);
            p.setTopic(t.getName());
            postRepository.save(p);
            topicRepository.save(t);
        }
    }
}

Сообщение класса:

@Entity
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String topic;
    private String title;
    @Temporal(TemporalType.TIMESTAMP)
    private Date posteDate;
    private String auther;
    @Lob
    private String content;
    private int readTimes;

    public void setTopic(String topic) {
        this.topic = topic;
    }
}

Класс Тема:

@Entity
public class Topic {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(unique=true)
    private String name;
    @Lob
    private String presentation;

    private ArrayList<String> coverPhotos;
    private ArrayList<Post> posts;

    public void addPost(Post post) {
        this.posts.add(post);
    }

    public void setPosts(ArrayList<Post> posts) {
        this.posts = posts;
    }

}

Сообщение об ошибке:

2019-05-07 11:56:22.907 ERROR 24900 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вам не хватает @RequestBody аннотации в вашем методе контроллера. Ваш метод контроллера должен выглядеть примерно так, как показано ниже. Таким образом, тело будет сопоставлено с вашим Post объектом, а параметр запроса topicId будет сопоставлен с вашим topicId объектом.

public void addPost(@RequestBody Post p, @RequestParam(value="topicID") int topicID)
0 голосов
/ 07 мая 2019

Вам нужно создать массив перед использованием .add (), измените свой addPost () следующим образом:

public void addPost(Post post) {
    if(posts == null) posts = new ArrayList<>();
    this.posts.add(post);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...