Spring Boot Запрос GET возвращает пустой JSON, хотя данные существуют в базе данныхJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Boot Запрос GET возвращает пустой JSON, хотя данные существуют в базе данных

Сообщение Anonymous »

Я работаю над приложением Spring Boot, которое подключается к базе данных PostgreSQL. У меня есть игрок класса сущности, и данные вставляются в базу данных вручную. Однако, когда я отправляю запрос GET для извлечения данных, ответ является пустым массивом JSON (). Несмотря на это, я вижу данные в базе данных, используя SQL-запросы напрямую.

Код: Выделить всё

package com.backend.basketMarkt.Entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Table(name = "Player_Stats")
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true)
private Integer id;

@Column(name = "player")
private String playerName;
private Integer age;
private String team;

@Column(name = "pos")
private String position;

@Column(name = "games_played")
private Integer gamesPlayed;

@Column(name = "games_started")
private Integer gamesStarted;

@Column(name = "minutes_played")
private float minutesPlayed;

@Column(name = "field_goals")
private float fg;

@Column(name = "field_goals_attempted")
private float fga;

@Column(name = "field_goals_percentage")
private float fgp;

@Column(name = "three_point_fg")
private float threePointFg;

@Column(name = "three_point_attempted")
private float threePointA;

@Column(name = "three_point_percentage")
private float threePointP;

@Column(name = "two_point_fg")
private float twoPointFg;

@Column(name = "two_point_attempted")
private float twoPointA;

@Column(name = "two_point_percentage")
private float twoPointP;

@Column(name = "effective_fg_percentage")
private float effectiveFgPercentage;

@Column(name = "free_throws")
private float freeThrows;

@Column(name = "free_throws_attempted")
private float freeThrowsAttempted;

@Column(name = "free_throw_percentage")
private float freeThrowsPercentage;

@Column(name = "offensive_rebounds")
private float offensiveRebounds;

@Column(name = "defensive_rebounds")
private float defensiveRebounds;

@Column(name = "total_rebounds")
private float totalRebounds;

private float assists;
private float steals;
private float blocks;
private float turnovers;

@Column(name = "personal_fouls")
private float personalFouls;

private float points;

}
< /code>
 Repository < /h3>
package com.backend.basketMarkt.Repository;

import com.backend.basketMarkt.Entity.Player;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

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

@Repository
public interface PlayerRepository extends JpaRepository {
void deleteByPlayerName(String player);

Optional findByPlayerName(String player);
List findByPosition(String position);
List findByPositionAndPlayerName(String position, String player);
List findByTeam(String team);
List findByTeamAndPlayerName(String team, String player);
void deleteByPosition(String position);
}
< /code>
 Service < /h3>
package com.backend.basketMarkt.Service;

import com.backend.basketMarkt.Entity.Player;
import com.backend.basketMarkt.Repository.PlayerRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Component
public class PlayerService {

final private PlayerRepository playerRepository;

@Autowired
public PlayerService(PlayerRepository playerRepository) {
this.playerRepository = playerRepository;
}

public List  getPlayers() {
List players = playerRepository.findAll();
System.out.println("Total players in DB: " + players.size()); // Debug için
return players;
}

public Optional getPlayerByName(String player) { // repositorydeki birinci
return playerRepository.findByPlayerName(player);
}

public List getPlayersByPosition(String position) { // repositorydeki ikinci
return playerRepository.findByPosition(position);
}

public List getPlayersByPositionAndPlayer(String position, String player) { // repositorydeki ucuncu
return playerRepository.findByPositionAndPlayerName(position, player);
}

public List getPlayersByTeam(String team) { // repositorydeki dorduncu
return playerRepository.findByTeam(team);
}

public List getPlayersByTeamAndPlayer(String team, String player) { // repositorydeki besinci
return playerRepository.findByTeamAndPlayerName(team, player);
}

public Player addPlayer(Player player) {
return playerRepository.save(player);
}

@GetMapping("/test")
public ResponseEntity testEndpoint() {
List players = playerRepository.findAll();
return ResponseEntity.ok("Total players in DB: " + players.size());
}

public Player updatePlayer(Player player) {
Optional existingPlayer = playerRepository.findByPlayerName(player.getPlayerName());

if (existingPlayer.isPresent()) {
Player playerToUpdate = existingPlayer.get();
playerToUpdate.setPosition(player.getPosition());
playerToUpdate.setTeam(player.getTeam());
playerToUpdate.setAge(player.getAge());
playerRepository.save(playerToUpdate);
return playerToUpdate;
}
return null;
}

@Transactional
public void deleteByPlayerName(String playerName) {
playerRepository.deleteByPlayerName(playerName);
}

@Transactional
public void deleteByPosition(String position) {
if (position == null || position.isEmpty()) {
throw new IllegalArgumentException("Position cannot be null or empty");
}
playerRepository.deleteByPosition(position);
}

}
< /code>
 контроллер < /h3>
package com.backend.basketMarkt.Controller;

import com.backend.basketMarkt.Entity.Player;
import com.backend.basketMarkt.Service.PlayerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping(path = "api/v1/player")
public class PlayerController {

private final PlayerService playerService;

@Autowired
public PlayerController(PlayerService playerService) {
this.playerService = playerService;
}

@GetMapping("/get")
public ResponseEntity getPlayers(
@RequestParam(required = false) String playerName,
@RequestParam(required = false) String team,
@RequestParam(required = false) String position
) {
if(team != null && position != null) {
return ResponseEntity.ok(playerService.getPlayersByTeamAndPlayer(team, position));
} else if (playerName != null) {
return playerService.getPlayerByName(playerName)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
} else if(position != null) {
return ResponseEntity.ok(playerService.getPlayersByPosition(position));
} else if (team != null) {
return ResponseEntity.ok(playerService.getPlayersByTeam(team));
} else {
return ResponseEntity.ok(playerService.getPlayers());
}
}

@PostMapping
public ResponseEntity addPlayer(@RequestBody Player playerName) {
Player newPlayer = playerService.addPlayer(playerName);
return new ResponseEntity(newPlayer, HttpStatus.CREATED);
}

@PutMapping
public ResponseEntity  updatePlayer(@RequestBody Player playerName) {
Player updatedPlayer = playerService.updatePlayer(playerName);
if(updatedPlayer != null) {
return new ResponseEntity(updatedPlayer, HttpStatus.OK);
}else{
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
}

@DeleteMapping("/{playerName}")
public ResponseEntity deletePlayer(@PathVariable String playerName) {
playerService.deleteByPlayerName(playerName);
return new ResponseEntity("Player Deleted", HttpStatus.OK);
}

@DeleteMapping("/deleteByPosition/{position}")
public ResponseEntity deletePlayerByPosition(@PathVariable String position) {
playerService.deleteByPosition(position);
return new ResponseEntity("Player Deleted", HttpStatus.OK);
}
}
< /code>
 база данных < /h3>
-- Table: public.Player_Stats

-- DROP TABLE IF EXISTS public."Player_Stats";

CREATE TABLE IF NOT EXISTS public."Player_Stats"
(
id integer NOT NULL DEFAULT nextval('"Player_Stats_id_seq"'::regclass),
player character varying(100) COLLATE pg_catalog."default",
age integer,
team character varying(60) COLLATE pg_catalog."default",
pos character varying(60) COLLATE pg_catalog."default",
games_played integer,
games_started integer,
minutes_played real,
field_goals real,
field_goals_attempted real,
field_goals_percentage real,
three_point_fg real,
three_point_attempted real,
three_point_percentage real,
two_point_fg real,
two_point_attempted real,
two_point_percentage real,
effective_fg_percentage real,
free_throws real,
free_throws_attempted real,
free_throw_percentage real,
offensive_rebounds real,
defensive_rebounds real,
total_rebounds real,
assists real,
steals real,
blocks real,
turnovers real,
personal_fouls real,
points real,
CONSTRAINT "Player_Stats_pkey" PRIMARY KEY (id)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public."Player_Stats"
OWNER to postgres;

SELECT * FROM "Player_Stats";

GRANT ALL ON TABLE public."Player_Stats" TO postgres;
Когда я тестирует запрос GET (/игроки), используя почтальон, он возвращает пустой массив JSON. Тем не менее, я вижу данные правильно в базе данных при непосредственном использовании запросов SQL. Данные правильно вставляются в базу данных вручную. Метод findall () должен вернуть данные, но он возвращает пустой массив.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... n-database

Вернуться в «JAVA»