как не учитывать @NotBlank в некоторых методах - PullRequest
0 голосов
/ 14 января 2019

Я делаю успокаивающее приложение в Spring boot, jpa, mysql. Я пометил некоторые из моих полей модели @NotBlank, чтобы вывести ошибку при создании объекта, если эти поля не заполнены. Теперь, когда я обновляюсь, я не хочу получать эту ошибку, если я не установил некоторые поля в моем теле json. Моя цель - обновить только те поля, которые присутствуют. Поэтому я хочу знать, есть ли способ не учитывать @NotBlank в моем методе обновления.

Это источник кода:

Для сущности

public class Note implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotBlank(name)
private String title;

@NotBlank
private String content;
//Getters and Setters

} 

Контроллер

@RestController
@RequestMapping("/api")
public class NoteController {

@Autowired
NoteRepository noteRepository;

// Create a new Note
@PostMapping("/notes")
public Note createNote(@Valid @RequestBody Note note) {
    return noteRepository.save(note);
}

// Update a Note

@PutMapping("/notes/{id}")
public Note partialUpdateNote(@PathVariable(value = "id") Long noteId,
                                         @RequestBody Note noteDetails) {          
    Note note = noteRepository.findById(noteId)
            .orElseThrow(() -> new ResourceNotFoundException("Note", "id",   noteId));
    //copyNonNullProperties(noteDetails, note);

    if(note.getTitle()!= null) {
        note.setTitle(noteDetails.getTitle());
    }else {
        note.setTitle(note.getTitle());
    }

    if(note.getContent()!= null) {
        note.setContent(noteDetails.getContent());
    }else {
        note.setContent(note.getContent());
    }
    Note updatedNote = noteRepository.save(note);
    return updatedNote;
}

// Delete a Note
@DeleteMapping("/notes/{id}")
public ResponseEntity<?> deleteNote(@PathVariable(value = "id") Long noteId) {
    Note note = noteRepository.findById(noteId)
            .orElseThrow(() -> new ResourceNotFoundException("Note", "id", noteId));

    noteRepository.delete(note);

    return ResponseEntity.ok().build();
}
}

ResourceNotFoundException - класс, ответственный за выбросы ошибок.

1 Ответ

0 голосов
/ 14 января 2019

Для этого вы можете использовать группы.

Добавить два интерфейса CreateGroup и UpdateGroup.

Используйте их следующим образом:

@NotBlank(groups = CreateGroup.class)
@Null(groups = UpdateGroup.class)
private String title;

В конечной точке создания

@Valid @ConvertGroup(from = Default.class, to = CreateGroup.class) Note note

В конечной точке обновления

@Valid @ConvertGroup(from = Default.class, to = UpdateGroup.class) Note note

Возможно, вам не нужно UpdateGroup. Это просто чтобы показать общий подход. Также для вложенных объектов внутри Note что-то вроде

@ConvertGroup(from = CreateGroup.class, to = UpdateGroup.class)

можно использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...