由于find不起作用,因此findById的Spring Boot控制器和服务功能

时间:2018-07-04 02:54:55

标签: spring spring-boot spring-data-jpa

service.java中的代码是这样的,我想使用所有基本的CRUD操作。我正在使用具有ID,名称和描述的POJO,并且我想使用它来获得一个主题。 以及为什么我不能使用find ...给出错误...并且在findById中我也无法检索

@Autowired
TopicRepository topicRepository;
public Optional<Topic> getTopic(String id)
{ 
    //lambda expression
    //return topics.stream().filter(t->t.getId().equals(id)).findFirst().get();
    return topicRepository.findById(id);
} 

我想知道如何编写控制器类? 目前我的控制器功能是这样的

@RestController
public class TopicController {
    @Autowired 
    private TopicService topicService;
    //here a list of objects from the topic.java is returned and it
    //is converted to json automatically by spring

@RequestMapping("/topics/{id}")
    public Topic getTopic(@PathVariable String id)
    {
        return topicService.getTopic(id);
    }

3 个答案:

答案 0 :(得分:0)

您没有使用任何HTTP方法来调用getTopic休息端点。

在REST中,只要我们想检索资源

,就会使用GET方法
@RestController
@RequestMapping("/topics")
public class TopicController {
    @Autowired 
    private TopicService topicService;

    @GetMapping("/{id}") // GET HTTP method 
    public Topic getTopic(@PathVariable String id)
    {
        return topicService.getTopic(id);
    }

答案 1 :(得分:0)

服务类功能

public Optional<Topic> getTopic(String id)
    { 
        //lambda expression
        //return topics.stream().filter(t->t.getId().equals(id)).findFirst().get();
        return topicRepository.findById(id);
    } 

和控制器功能

@RequestMapping("/topics/{id}")
    public Optional<Topic> getTopic(@PathVariable String id)
    {
        return topicService.getTopic(id);
    }

答案 2 :(得分:0)

很明显,您在 getTopic(String id)方法中使用了Optional。因此,您不能直接从控制器返回Optional的结果。从您的控制器,您必须调用 get()方法。尝试以下代码

@RequestMapping("/topics/{id}")
public Topic getTopic(@PathVariable String id)
{
    return topicService.getTopic(id).get();
}