Java Can';t访问API端点
因此,我最近开始学习Spring,学习了一门小课程,在这门课程中,我们创建了一个market api,开始时,我们创建了一个简单的hello world端点来进行测试。最近我们刚刚创建了一个用于访问产品列表的端点,但似乎所有请求都返回404错误,因为这个错误似乎与控制器有关,我认为不需要发布所有代码 这是我的控制器Java Can';t访问API端点,java,spring,spring-boot,rest,code-coverage,Java,Spring,Spring Boot,Rest,Code Coverage,因此,我最近开始学习Spring,学习了一门小课程,在这门课程中,我们创建了一个market api,开始时,我们创建了一个简单的hello world端点来进行测试。最近我们刚刚创建了一个用于访问产品列表的端点,但似乎所有请求都返回404错误,因为这个错误似乎与控制器有关,我认为不需要发布所有代码 这是我的控制器ProductController.java,我只添加了前两个方法的映射(因为我仍在尝试修复此错误) 导入org.springframework.beans.factory.anno
ProductController.java
,我只添加了前两个方法的映射(因为我仍在尝试修复此错误)
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.web.bind.annotation.GetMapping;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RestController;
@RestController
@请求映射(“/products”)
公共类产品控制器{
@自动连线
私人产品服务;
@GetMapping(“/all”)
公共列表getAll(){
return productService.getAll();
}
@GetMapping(“/{productId}”)
公共可选getProduct(@PathVariable(“productId”)int productId){
return productService.getProduct(productId);
}
公共可选getByCategory(int categoryId){
return productService.getByCategory(categoryId);
}
公共产品储蓄(产品){
返回产品服务。保存(产品);
}
公共布尔删除(int-productId){
返回productService.delete(productId);
}
}
我还必须处理一个未找到的bean,该bean通过使用将域对象转换为dto(反之亦然),并出现以下错误:
我确保用@Mapper(componentModel=“spring”)
我设法解决了这个问题(来源于另一个学生的评论)
导入org.springframework.boot.SpringApplication;
导入org.springframework.boot.autoconfigure.springboot应用程序;
@SpringBootApplication(scanBasePackages={“com.platzi.market.persistence.mapper.ProductMapper”,})
公共类平台MarketApplication{
公共静态void main(字符串[]args){
运行(PlatziMarketApplication.class,args);
}
}
但是我不确定这是否会对controller类造成一些干扰
您正在访问正确的端点吗
这是我的应用程序。属性
:
spring.profiles.active=dev
server.servlet.context-path=/platzi-market/api
这是活动的dev
配置文件(application-dev.properties
)
因此,在我的控制器中访问所有产品的端点应该是:localhost:8080/platzi-market/api/products/all
,返回404
我还检查了我是否在使用https,所以我确保在Postman中使用http://这也返回了404
我仔细检查了终端中的输出,以确保使用了正确的端口和上下文路径:
2021-02-23 17:20:07.583 INFO 51334 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '/platzi-market/api'
2021-02-23 17:20:07.594 INFO 51334 --- [ main] c.platzi.market.PlatziMarketApplication : Started PlatziMarketApplication in 3.881 seconds (JVM running for 4.296)
如果您想检查代码的其余部分,这里有一个到repo的链接:,希望这能让您满意,因为我对错误XD发疯了我可以重现您的问题。。。(使用EclipseST4.9.0)。 当以“SpringBootRunConfiguration”(在eclipse中)运行时,会出现上下文,但有一个适当的警告。我可以复制404错误页面(由于缺少
/error
映射!)
scanBasePackages
,发现上下文没有启动。(具有所描述的问题)
build.gradle
,我添加了:
plugins {
...
id "com.diffplug.eclipse.apt" version "3.26.0" // Only for Eclipse
}
…如所述
gradle:bootRun
运行,并在映射程序中发现以下生成/编译错误:
类别映射中
必须是“description”
而不是“description”
Categoria
中的productos
缺少Getter/SetterProducto
中的categoria
缺少Getter/Setterloclahost:8080/platzi market/api/products/all
*:I在空(不同的/h2/内存中)数据库上“测试”。(这意味着可能存在运行时错误。)
热烈欢迎来到我们的家 回顾您的回购协议,我可以向您推荐:
- (下一步)创建一些测试(针对映射器、repo、控制器…)
- 可能吧
- 当然,不要:在公开回购中公开(真实的)产品凭证李>
scanBasePackages
可能需要一个包名而不是类名。应该是scanBasePackages={“com.platzi.market.persistence.mapper”}
没有注意到,少担心一件事,谢谢!您好,我刚刚将这些更改添加到DTO类和映射器中,但问题仍然存在,如何查看VSCode中的编译错误?。我将试用Eclipse,以确保VSCode不会引起任何问题。(希望不是因为我真的很喜欢它,哈哈)。疯狂的错误不是由控制器引起的,而是其他层,我希望在抛出异常时修复此类错误。PS:谢谢你欢迎我进入春天,到目前为止,我非常喜欢Laravel和dotNet!只是尝试在Eclipse中运行应用程序,结果相同,可能是数据库连接错误,我将尝试sqllite,以确保在启动gradle构建时(例如,从任何IDE/terminal/shell启动/gradlew bootRun
):“错误:未知属性”描述“在结果类型分类中。您的意思是“描述”?“
spring boot中的sql lite是…但不像VScode中的(例如)、hsql、…mapstruct那样“开箱即用”。。。
2021-02-23 17:20:07.583 INFO 51334 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '/platzi-market/api'
2021-02-23 17:20:07.594 INFO 51334 --- [ main] c.platzi.market.PlatziMarketApplication : Started PlatziMarketApplication in 3.881 seconds (JVM running for 4.296)
plugins {
...
id "com.diffplug.eclipse.apt" version "3.26.0" // Only for Eclipse
}