Код: Выделить всё
public record VideoGame(
@Positive
Integer id,
@NotEmpty
String title,
@NotEmpty
String console,
@NotEmpty
String genre,
String publisher,
String developer,
Double critic_score,
Double other_sales,
LocalDate release_date,
LocalDate last_update
) { }
Код: Выделить всё
@Repository
public class VideoGameRepository {
private final JdbcClient jdbcClient;
public VideoGameRepository(JdbcClient jdbcClient) {
this.jdbcClient = jdbcClient;
}
public void create(VideoGame videoGame) {
var newVideoGame = jdbcClient.sql("INSERT INTO videogamesalestest (id, title, console, genre, publisher, developer, critic_score, release_date, last_update)" +
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
.param(List.of(videoGame.id(), videoGame.title(), videoGame.console(), videoGame.genre(), videoGame.publisher(), videoGame.developer(), videoGame.critic_score(), videoGame.release_date(), videoGame.last_update()))
.update();
Assert.state(newVideoGame == 1, "Failed to insert new videoGame");
}
}
Код: Выделить всё
@RestController
@RequestMapping("/api/videogames")
public class VideoGameController {
private final VideoGameRepository videoGameRepository;
public VideoGameController(VideoGameRepository videoGameRepository) {
this.videoGameRepository = videoGameRepository;
}
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("")
void create(@RequestBody VideoGame videoGame) {
videoGameRepository.create(videoGame);
}
}
Я пробовал просто установив для значения поля значение null в теле JSON как таковое, а затем отправив запрос:
Код: Выделить всё
{
"id": 1,
"title": "NewGame",
"console": "Xbox",
"genre": "Action",
"publisher": "CBGAMES",
"developer": "CBGAMES",
"critic_score": 10.0,
"release_date": "2025-01-07",
"last_update": null
}
Я также пробовал аннотировать поля в записи с помощью @Nullable, но я получаю предупреждение в репозитории о том, что аргумент может быть нулевым.
Что я могу сделать, чтобы добиться этого? Нужно ли мне создать класс вместо записи для обработки нулевых значений или есть более «упругий» способ добиться этого. Я также рассматривал возможность использования опциональных опций, но читал, что на самом деле это не то, чего хотели добиться с помощью опциональных опций. Я также не хочу запрещать клиенту передавать полную запись, поскольку в моем случае это не имеет смысла.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -framework