как можно добавить только одни данные? - PullRequest
0 голосов
/ 02 июля 2019
@PutMapping("/api/cricketer/{id}")
public ResponseEntity<Cricketer> updateCricketer(@PathVariable("id") Long id, @RequestBody Cricketer cricketer) {
    Cricketer cCricketer = cricketerService.findById(id);
    cCricketer.setCountry(cricketer.getCountry());
    cCricketer.setName(cricketer.getName());
    cCricketer.setHighestScore(cricketer.getHighestScore());
    cricketerRepository.save(cCricketer);
    return new ResponseEntity<Cricketer>(cricketer, HttpStatus.OK);
}

Привет всем. Когда я пытаюсь обновить данные с помощью метода updateCricketer, он обновляет данные, когда я их ввел. Но другие данные обнуляются. Кто-нибудь знает, как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Другим решением для этого является использование объектов передачи данных и сопоставителя объектов, который позаботится о проверке нуля в зависимости от выбранной вами стратегии.

http://mapstruct.org/documentation/stable/reference/html/#mapping-result-for-null-arguments

0 голосов
/ 02 июля 2019

Перед установкой значений сделайте нулевую проверку.

@PutMapping("/api/cricketer/{id}")
public ResponseEntity<?> updateCricketer(@PathVariable("id") Long id, @RequestBody Cricketer cricketer) {
    Cricketer cCricketer = cricketerService.findById(id);
    if(Objects.nonNull(cCricketer)) {
        cCricketer.setCountry(Objects.isNull(cricketer.getCountry()) ? cCricketer.getCountry() : cricketer.getCountry());
        cCricketer.setName(Objects.isNull(cricketer.getName()) ? cCricketer.getName() : cricketer.getName());
        cCricketer.setHighestScore(Objects.isNull(cricketer.getHighestScore()) ? cCricketer.getHighestScore() : cricketer.getHighestScore());
        // Do same to the rest of the fields

        cricketerRepository.save(cCricketer);

        return new ResponseEntity<>(cricketer, HttpStatus.OK);
    } else {
        return new ResponseEntity<>("No cricketer Found!", HttpStatus.OK);
    }
}
...