gpt4 book ai didi

java - REST API 查询返回 404?

转载 作者:行者123 更新时间:2023-11-30 06:12:34 24 4
gpt4 key购买 nike

我使用 REST API 创建了一个简单的 Spring Boot 应用程序。我正在使用以下 Controller :

package me.hiboy.SpringBootRESTAPI;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class BlogController {
@Autowired
BlogRepository blogRepository;

@GetMapping("/blog")
public List<Blog> index() {
return blogRepository.findAll();
}

@GetMapping("/blog/{id}")
public Blog show(@PathVariable String id) {
int blogId=Integer.parseInt(id);
return blogRepository.findOne(blogId);
}

@PostMapping("/blog/search")
public List<Blog> search(@RequestBody Map<String, String> body) {
String searchTerm=body.get("text");
return blogRepository.findByTitleContainingOrContentContaining(searchTerm, searchTerm);
}

@PostMapping("/blog")
public Blog create(@RequestBody Map<String, String> body) {
String title=body.get("title");
String content=body.get("content");

return blogRepository.save(new Blog(title, content));
}

@PutMapping("/blog/{id}")
public Blog update(@PathVariable String id, @RequestBody Map<String, String> body) {
int blogId=Integer.parseInt(id);
Blog blog=blogRepository.findOne(blogId);
blog.setTitle(body.get("title"));
blog.setContent(body.get("content"));

return blogRepository.save(blog);
}

@DeleteMapping("/blog/{id}")
public boolean delete(@PathVariable String id) {
int blogId=Integer.parseInt(id);
blogRepository.delete(blogId);
return true;
}
}

以及以下实体:

package me.hiboy.SpringBootRESTAPI;

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

@Entity
public class Blog {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

private String title;
private String content;

public Blog() {}

public Blog(String title, String content) {
this.setTitle(title);
this.setContent(content);
}

public Blog(int id, String title, String content) {
this.setId(id);
this.setTitle(title);
this.setContent(content);
}

public int getId() {
return id;
}

public String getTitle() {
return title;
}

public String getContent() {
return content;
}

public void setId(int id) {
this.id=id;
}

public void setTitle(String title) {
this.title=title;
}

public void setContent(String content) {
this.content=content;
}

@Override
public String toString() {
return "Blog{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}

但是,由于某种原因,当我访问 localhost 时,我无法得到任何响应(我得到 404 响应)。有人可以指出我必须缺少什么吗?这是一个简单的教程,我正在关注this tutorial我构建的其他文件包括:pom.xmlapplication.propertiesdatabase.sqlApp.java (其中有我的 main() 函数和 BlogRepository.java

谢谢!

编辑:

App.java如下:

package me.hiboy.SpringBootRESTAPI;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@ComponentScan({"com.delivery.request"})
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
}

BlogRepository.java如下:

package me.hiboy.SpringBootRESTAPI;

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

import java.util.List;

@Repository
public interface BlogRepository extends JpaRepository<Blog, Integer> {
List<Blog> findByTitleContainingOrContentContaining(String text, String textAgain);
}

编辑:

我的application.properties如下:

#spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://mysql-standalone:3306/restapi
spring.datasource.username=sa
spring.datasource.password=<my_password_here>

上传错误的屏幕截图:

enter image description here

编辑:虽然我完全理解了教程,但我无法理解的是注释:@ComponentScan({"com.delivery.request"})。如果不包含此内容,则会收到错误:考虑在配置中定义类型为“me.hiboy.SpringBootRESTAPI.BlogRepository”的 bean。我遵循的教程不包含此注释,并且我通过关注一些SO帖子来解决这个问题。我想知道我做了什么不同以便需要此注释。如果您能指出,这将对我的学习有很大帮助,我将不胜感激!

编辑:我已将整个代码上传到 GitHub 。这是一个相当简单直接的应用程序,但我不知道哪里出了问题! :(

另外,根据我之前的问题here ,我不确定 resources 文件夹的位置。目前,我的目录结构如下:

Directory structure

我对此表示怀疑,因为我在这里描述的所有问题都是在我将 MySQL 数据库与此应用程序集成之后才开始的。如果我只是对值进行硬编码,那么 API 查询就可以正常工作(我不会收到 404 错误)。我也很怀疑,因为尽管我在 application.properties 文件中提到了端口 8086,但它(WhiteLabel 错误)仍然在端口 8080 上启动>。谢谢!

最佳答案

正如聊天/评论部分中所讨论的,我只是总结要点作为答案。

resources 文件夹应与 src/main 下的 java 文件夹并行存在,并且应标记为资源。

另外,在 App.java 中注释以下内容

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@ComponentScan({"com.delivery.request"})

确保在 application.properties 文件下更新密码。

现在应该可以工作了。

此外,请确保 java 版本正确,并且在运行时和编译时都具有编译器兼容性。

关于java - REST API 查询返回 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49911186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com