我使用REST API创建了一个简单的Spring Boot应用程序。我使用以下控制器:
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.xml
,application.properties
,database.sql
,App.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>
上传错误的屏幕截图:
编辑:虽然我完全理解了教程,但我无法理解的是注释:@ComponentScan({"com.delivery.request"})
。如果没有包含这个,那么我会收到一个错误:Consider defining a bean of type 'me.hiboy.SpringBootRESTAPI.BlogRepository' in your configuration.
我所遵循的教程不包含这个注释,我通过跟踪一些SO帖子来解决这个问题。我想知道我做了哪些不同以便需要这个注释。如果你能指出,这对我的学习有很大帮助,我将非常感激!
修改:我已在GitHub上传了整个代码。这是一个相当简单和直接的应用程序,但我不知道我哪里出错了! :(
另外,根据我之前的问题here,我不确定resources
文件夹的位置。目前,我的目录结构如下:
我对此表示怀疑,因为我在此处描述的所有问题仅在我将MySQL数据库与此应用程序集成后才开始。如果我只是硬编码值,那么API查询工作正常(我没有得到404)。我也很怀疑,因为虽然我在8086
文件中提到了端口application.properties
,但它(WhiteLabel错误)仍然在端口8080
上启动。谢谢!
答案 0 :(得分:1)
正如聊天/评论部分所述,我只是将这些要点总结为答案。
资源文件夹应与 src / main 下的 java 文件夹并行显示,并且应标记为资源。
另外,请在App.java中注释以下内容
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@ComponentScan({"com.delivery.request"})
确保在application.properties
文件下更新密码。
现在应该可以了。
此外,请确保java版本在运行时和编译时兼容编译器兼容性。