使用 Spring Data JPA 在 Spring Boot 2 应用程序中发布数据
Posted
技术标签:
【中文标题】使用 Spring Data JPA 在 Spring Boot 2 应用程序中发布数据【英文标题】:Posting data in a Spring Boot 2 Application with Spring Data JPA 【发布时间】:2020-02-26 09:34:39 【问题描述】:我正在尝试通过带有 Spring Data JPA 的 Spring Boot 2 应用程序将来自邮递员的数据发布到 mysql 数据库中。我得到的只是 404 错误。
主要
@SpringBootApplication
public class ProfileApplication
public static void main(String[] args)
SpringApplication.run(ProfileApplication.class, args);
实体
@Entity
public @Data class Profile
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String profileText;
控制器
@RestController
@RequestMapping(value = "/profile", produces = MediaType.APPLICATION_JSON_VALUE )
public class ProfileController
@Autowired
private ProfileRepository profileRepository;
public ProfileRepository getRepository()
return profileRepository;
@GetMapping("/profile/id")
Profile getProfileById(@PathVariable Long id)
return profileRepository.findById(id).get();
@PostMapping("/profile")
Profile createOrSaveProfile(@RequestBody Profile newProfile)
return profileRepository.save(newProfile);
存储库
public interface ProfileRepository extends CrudRepository<Profile, Long>
application.properties
server.port = 8080
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/profiledb
spring.datasource.username=root
spring.datasource.password=
server.servlet.context-path=/service
【问题讨论】:
你有没有在你的机器上本地运行你的mysql服务器实例? 请在问题中添加邮递员的卷曲或截图。 @MohsenAbasi MySQL 在本地是 tunnint。 404 表示找不到你调用的api。也许您使用了错误的路径。 看看@Alexandru Somai 的回答。 【参考方案1】:似乎在您的ProfileController
中,您定义了两次profile
端点(第一次在类级别,第二次在方法级别)。解决方案是删除其中一个:
@RestController
@RequestMapping(value = "/profile", produces = MediaType.APPLICATION_JSON_VALUE )
public class ProfileController
@Autowired
private ProfileRepository profileRepository;
public ProfileRepository getRepository()
return profileRepository;
// Notice that I've removed the 'profile' from here. It's enough to have it at class level
@GetMapping("/id")
Profile getProfileById(@PathVariable Long id)
return profileRepository.findById(id).get();
// Notice that I've removed the 'profile' from here. It's enough to have it at class level
@PostMapping
Profile createOrSaveProfile(@RequestBody Profile newProfile)
return profileRepository.save(newProfile);
【讨论】:
如果他想调用 /service/profile/profile 这不是错误(即使谈论 api 设计很糟糕)。 你是对的。由于他没有提及他提出的要求,我认为他只想打电话给/service/profile
。 (我会更新我的答案以包含它)
我实现了您编辑的代码@AlexandruSomai。现在可以了。【参考方案2】:
哪个网址?有效网址必须如下所示:
获取:http://localhost:8080/service/profile/profile/1
发帖:http://localhost:8080/service/profile/profile
【讨论】:
以上是关于使用 Spring Data JPA 在 Spring Boot 2 应用程序中发布数据的主要内容,如果未能解决你的问题,请参考以下文章
负载平衡 (ribbon) 和路由 (zuul) Spring REST API (Spring Data JPA) 请求到同一服务的多个副本