У меня очень странная проблема с контроллером отдыха. У меня есть очень простой контроллер отдыха.Проблемы с контроллером REST Spring Boot
package com.therealdanvega.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.therealdanvega.domain.Post;
import com.therealdanvega.service.PostService;
@RestController
public class PostController {
private PostService postService;
@Autowired
public PostController(PostService postService){
this.postService = postService;
}
@RequestMapping("posts/test")
public String test(){
return "test...";
}
@RequestMapping(name="/posts/", method=RequestMethod.GET)
public Iterable<Post> list(){
return postService.list();
}
}
Это вызывает службу
package com.therealdanvega.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.therealdanvega.domain.Post;
import com.therealdanvega.repository.PostRepository;
@Service
public class PostService {
private PostRepository postRepository;
@Autowired
public PostService(PostRepository postRepository){
this.postRepository = postRepository;
}
public Iterable<Post> list(){
return postRepository.findAll();
}
}
Это вызывает хранилище для извлечения данных.
package com.therealdanvega.repository;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.therealdanvega.domain.Post;
@Repository
public interface PostRepository extends CrudRepository<Post, Long> {
Post findFirstByOrderByPostedOnDesc();
List<Post> findAllByOrderByPostedOnDesc();
Post findBySlug(String slug);
}
Я использую H2 в базе данных памяти и у меня есть только один Начать запись там и могу подтвердить, перейдя в консоль Н2 и работает отборные снова сообщение таблицы.
Если я нахожусь в/тестовом URL-адресе, я получаю именно то, что ожидаю, это строка «test ...», напечатанная в браузере. Если я попробую и перечислить все сообщения (которые снова будут только 1), браузер начинает цикл снова и снова и продолжает печатать JSON, представляющий 1 сообщение, столько раз, что приложение выходит из строя, и я вижу это на консоли
2015-11-07 17: 58: 42,959 ОШИБКА 5546 --- [NiO-8080-Exec-1] oaccC [[[/] [DispatcherServlet]:... Servlet.service() для сервлет DispatcherServlet бросил за исключением java.lang.IllegalStateException: getOutputStream() уже название для этого ответа
Это то, что мой браузер выглядит, когда я посещаю/сообщения, которые должны только список 1
Post Domain Class
package com.therealdanvega.domain;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.springframework.data.annotation.CreatedDate;
@Entity
public class Post {
@Id @GeneratedValue
private Long id;
private String title;
@Column(columnDefinition = "TEXT")
private String body;
@Column(columnDefinition = "TEXT")
private String teaser;
private String slug;
@CreatedDate
@Temporal(TemporalType.TIMESTAMP)
private Date postedOn;
@ManyToOne
private Author author;
@SuppressWarnings("unused")
private Post(){
}
public Post(String title){
this.setTitle(title);
}
// getters & setters
}
Кто-нибудь знает, что я делаю не так или не хватает? Почему он не показывает только 1 запись в формате JSON?
Почему вы не используете ResponseEntity, в который вы помещаете список своих объектов? Я бы пропустил часть Iterable ... – Marged
Можете ли вы показать объект Post? –
@Marged Я имею в виду, что я мог, но не это то, что должен сделать RestController? Возьмите данные, которые у меня есть, и конвертируйте их и верните JSON? – cfaddict