我正在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是负责引发错误的类。
答案 0 :(得分:1)
您可以为此使用组。
添加两个接口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)
可以使用。