Как разрешить нулевые значения в теле запроса POST? Java и Spring FrameworkJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как разрешить нулевые значения в теле запроса POST? Java и Spring Framework

Сообщение Anonymous »

У меня есть запись в видеоигре:

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

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);
}
}
Я хочу разрешить клиенту отправлять запрос POST, который может содержать или не содержать все поля записи видеоигры.
Я пробовал просто установив для значения поля значение null в теле JSON как таковое, а затем отправив запрос:

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

{
"id": 1,
"title": "NewGame",
"console": "Xbox",
"genre": "Action",
"publisher": "CBGAMES",
"developer": "CBGAMES",
"critic_score": 10.0,
"total_sales": 9.9,
"na_sales": 5.0,
"jp_sales": 2.2,
"pal_sales": 0.5,
"other_sales": 0.1,
"release_date": "2025-01-07",
"last_update": null
}
но я получаю ответ со статусом 500 «Внутренняя ошибка сервера».
Я также пробовал аннотировать поля в записи с помощью @Nullable, но я получаю предупреждение в репозитории о том, что аргумент может быть нулевым.
Что я могу сделать, чтобы добиться этого? Нужно ли мне создать класс вместо записи для обработки нулевых значений или есть более «упругий» способ добиться этого. Я также рассматривал возможность использования опциональных опций, но читал, что на самом деле это не то, чего хотели добиться с помощью опциональных опций. Я также не хочу запрещать клиенту передавать полную запись, поскольку в моем случае это не имеет смысла.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -framework
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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