java requestmapping与Postman一起返回404错误

时间:2018-04-02 20:11:36

标签: java postman

我试图让java响应Postman的GET请求。当我使用Postman向localhost发送GET请求时:8080 / chat这是响应(我原本预计会返回一个空列表,因为还没有数据存在:

{
    "timestamp": "2018-04-02T20:00:26.413+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/chat"
}

我的应用程序中有2个包。他们是com.dogo和com.dogochat.chat。 com.dogo中的文件是DogoApplication.java。这是代码:

package com.dogo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DogoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DogoApplication.class, args);
    }
}

第二个包名为com.dogochat.chat。有3个文件(2个类和1个接口)。文件名是Message.java,MessageController.java和MessageRepository.java。

这是Message.java中的代码:

package com.dogochat.chat;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="message")
public class Message {

    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String content;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }    
    }

这是MessageController.java中的代码:

package com.dogochat.chat;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/chat")
public class MessageController {

    @Autowired
    MessageRepository dao;

    @GetMapping("/get")
    public List<Message> getMessages(){
        List<Message> foundMessages = dao.findAll();
        return foundMessages;
    }

    @PostMapping("/post")
    public ResponseEntity<Message> postMessage(@RequestBody Message message) 
    {
        // saving to DB using instance of the repo interface
        Message createdMessage = dao.save(message);
        // RespEntity crafts response to include correct status codes.
        return ResponseEntity.ok(createdMessage);
    }
}

这是MessageRepository.java中的代码(虽然我不认为这个小测试需要这个代码)

package com.dogochat.chat;

import org.springframework.data.jpa.repository.JpaRepository;

public interface MessageRepository extends JpaRepository<Message, Integer>{

}

非常感谢任何帮助/建议。

感谢。

2 个答案:

答案 0 :(得分:0)

检查您的@SpringBootApplication课程是否在所有包裹之上,或者至少在同一个包裹中。您的网址似乎不可见。

此外,在您的邮递员中,您必须配置headers content-type=application/json

对于更易读的代码(只是我的观点),你应该有这样的东西:

package com.dogochat.chat;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/chat")
public class MessageController {

    @Autowired
    MessageRepository dao;

    @GetMapping("/get")
    public List<Message> getMessages(){
        List<Message> foundMessages = dao.findAll();
        return foundMessages;
    }

    @PostMapping("/post")
    public ResponseEntity<Message> postMessage(@RequestBody Message message) 
    {
        // saving to DB using instance of the repo interface
        Message createdMessage = dao.save(message);
        // RespEntity crafts response to include correct status codes.
        return ResponseEntity.ok(createdMessage);
    }
}

答案 1 :(得分:0)

我知道我的回复已经很晚了,但迟到总比不到好。

对于新的 Spring Boot 开发人员来说,这是一个非常常见的错误,我也多次遇到过这个问题。

这样做的原因是您的 ma​​in() 方法所在的包。

在您的情况下,您的 MessageController、Message 和您的 MessageRepository 位于包 com.dogochat.chat 下,但是您的 ma​​in()方法在 com.dogo 下,这是一个完全不同的包。

@SpringBootApplication 内部运行@ComponentScan,如果父包和子包不同,则无法运行扫描并抛出上述错误。

为避免这种混淆,请遵循此包结构。

enter image description here

希望这会有所帮助。快乐编码!