Spring boot 在一些方法中如何不考虑@空白

Spring boot 在一些方法中如何不考虑@空白,spring-boot,jpa,Spring Boot,Jpa,我正在用SpringBoot、jpa和mysql做一个restful应用程序。我已经在我的一些模型字段@NotBlank上做了注释,如果这些字段为空,则会在创建对象时打印错误。 现在,当我在更新时,如果我没有在json正文中设置一些字段,我不想得到那个错误。我的目标是只更新存在的字段。 因此,我想知道在更新方法中是否有一种方法不考虑@ NoBLIN。 这是源代码: 对于实体 public class Note implements Serializable { @Id @GeneratedVal

我正在用SpringBoot、jpa和mysql做一个restful应用程序。我已经在我的一些模型字段@NotBlank上做了注释,如果这些字段为空,则会在创建对象时打印错误。 现在,当我在更新时,如果我没有在json正文中设置一些字段,我不想得到那个错误。我的目标是只更新存在的字段。 因此,我想知道在更新方法中是否有一种方法不考虑@ NoBLIN。 这是源代码:

对于实体

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();
}
}
@RestController
@请求映射(“/api”)
公共类记事本控制器{
@自动连线
NoteRepository NoteRepository;
//创建新注释
@邮戳(“/notes”)
公共注释createNote(@Valid@RequestBody注释){
返回notepository.save(note);
}
//更新注释
@PutMapping(“/notes/{id}”)
公共便笺partialUpdateNote(@PathVariable(value=“id”)长便笺id,
@请求正文注释详细信息){
Note=noteRepository.findById(noteId)
.orelsetrow(()->newResourceNotFoundException(“Note”,“id”,noteId));
//copyNonNullProperties(注详情,注);
if(note.getTitle()!=null){
note.setTitle(noteDetails.getTitle());
}否则{
note.setTitle(note.getTitle());
}
if(note.getContent()!=null){
note.setContent(noteDetails.getContent());
}否则{
note.setContent(note.getContent());
}
Note updatedNote=noteRepository.save(Note);
返回更新的注释;
}
//删除注释
@删除映射(“/notes/{id}”)
public ResponseEntity deleteNote(@PathVariable(value=“id”)Long noteId){
Note=noteRepository.findById(noteId)
.orelsetrow(()->newResourceNotFoundException(“Note”,“id”,noteId));
notepository.delete(note);
返回ResponseEntity.ok().build();
}
}

ResourceNotFoundException是负责抛出错误的类。

您可以使用组来抛出错误

添加两个接口
CreateGroup
UpdateGroup

通过以下方式使用它们:

@NotBlank(groups = CreateGroup.class)
@Null(groups = UpdateGroup.class)
private String title;
在“创建端点”对话框中

@Valid@ConvertGroup(from=Default.class,to=CreateGroup.class)注意事项

在更新端点中

@Valid@ConvertGroup(from=Default.class,to=UpdateGroup.class)注意事项

可能您不需要
UpdateGroup
。这只是为了展示一种共同的方法。 也适用于
内的嵌套对象,请注意

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


可以使用。

省略
@Valid
就可以了。您当前的代码有什么问题吗?为了理解它是如何工作的,我自愿省略了它,因为我能够用内存中的应用程序解决同样的问题,而且它工作得很好,问题出在noteRepository上。我无法在Note中转换的findById(noteId)答案指向了正确的方向,但是我认为您应该提到,从
默认值
组转换也会抑制任何没有明确定义组的验证约束declared@vladynev我还是很确定