我使用了SpringBoot、Maven和PostgreSQL JDBC来创建一个简单的电影API,但每当我发出http GET请求时,这个错误总是出现:

{

我不知道为什么

我的控制器类:

package com.br.Idespair.MoviesAPIWithSQL.controller;

import com.br.Idespair.MoviesAPIWithSQL.model.Movie;
import com.br.Idespair.MoviesAPIWithSQL.service.MovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("api/movies")
public class MovieController {

@Autowired
private MovieService movieService;

@GetMapping
public ResponseEntity<List<Movie>> getAllMovies(){
return new ResponseEntity<List<Movie>> 
(movieService.AllMovies(), HttpStatus.OK);
}
@GetMapping("/{imdbId}")
public ResponseEntity<Optional<Movie>> 
getSingleMovie(@PathVariable 
String imdbId){
return new ResponseEntity<Optional<Movie>> 
(movieService.singleMovie(imdbId),HttpStatus.OK);
}
}

我的服务类别:

package com.br.Idespair.MoviesAPIWithSQL.service;

import com.br.Idespair.MoviesAPIWithSQL.model.Movie;
import 
com.br.Idespair.MoviesAPIWithSQL.repository.IMovieRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class MovieService {

@Autowired
private IMovieRepository movieRepository;

public List<Movie> AllMovies(){
return movieRepository.findAll();
}

public Optional<Movie> singleMovie(String imdbId){
return movieRepository.findMovieByImdbId(imdbId);
}

}

我在其中创建电影实例的模型类:

package com.br.Idespair.MoviesAPIWithSQL.model;

import jakarta.persistence.*;
;
import lombok.Data;
import org.springframework.data.annotation.Reference;


import java.util.List;
@Entity
@Data
@Table(name = "movies")
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String imdbId;
private String title;
private String releaseDate;
private String trailerLink;
private String poster;
private List<String> genres;
private List<String> backdrops;
@OneToMany(mappedBy = "movie")
private List<Review> reviews;

public Movie(String imdbId, String title, String 
releaseDate, String trailerLink, String poster, List<String> 
genres, List<String> backdrops) {
                this.imdbId = imdbId;
                this.title = title;
                this.releaseDate = releaseDate;
                this.trailerLink = trailerLink;
                this.poster = poster;
                this.genres = genres;
                this.backdrops = backdrops;
        }
}

和我的存储库类:

package com.br.Idespair.MoviesAPIWithSQL.repository;

import com.br.Idespair.MoviesAPIWithSQL.model.Movie;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;


public interface IMovieRepository extends 
JpaRepository<Movie,String> {

    Optional<Movie> findMovieByImdbId(String imdbId);

}

我试图读取错误消息,它告诉我对象imdb_id有错误,应该是imDBID,但所有引用imDBID的对象都是以这种方式写入的,并且我的任何类上都没有写入imdb_id.

我使用postman作为HTTP请求,使用postgres作为数据库 我还没有在这个应用程序上使用Docker.

推荐答案

错误消息指出列"m1_0.imdb_id"不存在,我认为错误是因为Java代码中的字段名(imdbId)与数据库中对应的列名(imdb_id)不匹配.您可以try 添加以下行来解决此问题:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "imdb_id") // Add this line
private String imdbId;

通过在Java代码中添加@Column(name="imdb_id"),您告诉Spring Boot,当他在数据库中保存或检索字段imdbId时,使用名为imdb_id的列.

如果这个建议解决了您的问题,也许您需要对所有用camelCase编写的字段执行相同的过程.

Edit:也可以看到https://www.baeldung.com/hibernate-field-naming-spring-boot

Java相关问答推荐

如何在Spring Security中设置CustomLogin路径?

Quarkus keycloat配置不工作.quarkus. keycloak. policy—enforcer. enable = true在. yaml表示中不工作

参数值[...]与预期类型java.util.Date不匹配

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

S的字符串表示是双重精确的吗?

Hibernate 6支持Joda DateTime吗?

Spring data JPA/Hibernate根据id获取一个列值

什么是Java原子属性的正确getter和setter

第二次按下按钮后,我需要将按钮恢复到其原始状态,以便它可以再次工作

具有阻塞方法的开源库是否应该为执行提供异步选项?

如何对多个字段进行分组和排序?

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

JOLT根据值删除并保留其余的json键

在缺少字段时使用Jackson With Options生成Optional.Empty()

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

Bash数组的单引号元素并使用空格连接

原始和参数化之间的差异调用orElseGet时可选(供应商)

当我将鼠标悬停在javafxTextArea上时,如何更改鼠标光标?

在JSON上获取反斜杠

为什么Java编译器为没有参数的方法(getter方法)创建桥接方法