繁体   English   中英

错误404-使用@RestController获取请求-SpringBoot

[英]Error 404 - Get request using @RestController - SpringBoot

是的,对此有很多疑问,但是每种情况都是唯一的。

目的是编写一个简单的应用程序,以使用: ControllerModelRepository对实体Product进行CRUD操作。

树:

+- com.teste
  +- controller
  | +- ProductController.java
  +- model
  | +- Product.java
  +- repository
  | +- ProductRepository.java
  +- SpringEsApplication.java

ProductController.java

@RestController
//@RequestMapping(value="/product") // When try it, not works too (same error).
public class ProductController {

@Autowired
private ProductRepository productRepository;

@PostMapping("/saveProduct")
public long saveProduct(@RequestBody List<Product> products) {
    productRepository.saveAll(products);
    return productRepository.count();
}

@GetMapping("/findAllProducts")
public Iterable<Product> findAllProducts() {
    return productRepository.findAll();
}

@GetMapping("/findProductByCode")
public List<Product> findProductByCode(@PathVariable String code) {
    return productRepository.findByCode(code);
}

}

产品.java

@Document(indexName = "product_index")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {

    @Id
    private String id;
    private String name;
    private String code;
    private double price;

}

ProductRepository.java

@Repository
public interface ProductRepository extends CrudRepository<Product,String> {

    List<Product> findByCode(String code);

}

SpringEsApplication.java

@SpringBootApplication
@ComponentScan(basePackages = {"com.teste.repository"})
public class SpringEsApplication {

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

}

邮递员GET请求

GET请求:

http://localhost:8080/findAllProducts

响应:

{
    "timestamp": "2019-09-18T14:10:38.305+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/findAllProducts"
}

即使没有数据,它也应该返回一些内容。

控制台日志启动

 :: Spring Boot ::        (v2.1.8.RELEASE)

2019-09-18 11:16:34.061  INFO 4764 --- [  restartedMain] com.teste.SpringEsApplication            : Starting SpringEsApplication on CTDDELL5JVV862 with PID 4764 (started by augusto.cadini in C:\Users\augusto.cadini\Desktop\Spring ElasticSearch projects\spring-es)
2019-09-18 11:16:34.069  INFO 4764 --- [  restartedMain] com.teste.SpringEsApplication            : No active profile set, falling back to default profiles: default
2019-09-18 11:16:34.193  INFO 4764 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2019-09-18 11:16:34.193  INFO 4764 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2019-09-18 11:16:34.774  INFO 4764 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-09-18 11:16:34.829  INFO 4764 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51ms. Found 2 repository interfaces.
2019-09-18 11:16:35.516  INFO 4764 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-09-18 11:16:35.544  INFO 4764 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-09-18 11:16:35.544  INFO 4764 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.24]
2019-09-18 11:16:35.671  INFO 4764 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-09-18 11:16:35.672  INFO 4764 --- [  restartedMain] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1479 ms
2019-09-18 11:16:35.949  INFO 4764 --- [  restartedMain] o.elasticsearch.plugins.PluginsService   : no modules loaded
2019-09-18 11:16:35.950  INFO 4764 --- [  restartedMain] o.elasticsearch.plugins.PluginsService   : loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
2019-09-18 11:16:35.950  INFO 4764 --- [  restartedMain] o.elasticsearch.plugins.PluginsService   : loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019-09-18 11:16:35.950  INFO 4764 --- [  restartedMain] o.elasticsearch.plugins.PluginsService   : loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019-09-18 11:16:35.950  INFO 4764 --- [  restartedMain] o.elasticsearch.plugins.PluginsService   : loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
2019-09-18 11:16:35.950  INFO 4764 --- [  restartedMain] o.elasticsearch.plugins.PluginsService   : loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019-09-18 11:16:36.901  INFO 4764 --- [  restartedMain] o.s.d.e.c.TransportClientFactoryBean     : Adding transport node : 192.168.99.100:9300
2019-09-18 11:16:37.260  INFO 4764 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2019-09-18 11:16:37.572  INFO 4764 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-09-18 11:16:37.956  INFO 4764 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-09-18 11:16:37.957  INFO 4764 --- [  restartedMain] com.teste.SpringEsApplication            : Started SpringEsApplication in 4.838 seconds (JVM running for 5.522)

从您的主类中删除@ComponentScan(basePackages = {"com.teste.repository"})

在您的情况下不是必需的。

当您提供@ComponentScan ,Spring引擎将仅扫描您提供的那些软件包。

需要@ComponentScan提供包/类的自定义扫描。

Person标识符的类型为Long,因此存储库应扩展为CrudRepository<Product, Long>而不是CrudRepository<Product, String>

接下来,rest constroller在"com.teste.repository"包的外部。 您可以删除@ComponentScan批注,spring会找到控制器。

问题出在您的@ComponentScan 默认情况下,Spring Boot会从SpringApplication.java的位置开始扫描所有SpringApplication.java 现在,您已经覆盖了此要求,并要求容器仅扫描repository 删除此行。 而是使用@EnableMongoRepositories

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM