我试图让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>{
}
非常感谢任何帮助/建议。
感谢。
答案 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 开发人员来说,这是一个非常常见的错误,我也多次遇到过这个问题。
这样做的原因是您的 main() 方法所在的包。
在您的情况下,您的 MessageController、Message 和您的 MessageRepository 位于包 com.dogochat.chat
下,但是您的 main()方法在 com.dogo
下,这是一个完全不同的包。
@SpringBootApplication 内部运行@ComponentScan,如果父包和子包不同,则无法运行扫描并抛出上述错误。
为避免这种混淆,请遵循此包结构。
希望这会有所帮助。快乐编码!