如何在某些方法中不考虑@NotBlank

时间:2019-01-14 12:24:10

标签: spring-boot jpa

我正在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 :(得分:1)

您可以为此使用组。

添加两个接口CreateGroupUpdateGroup

通过这种方式使用它们:

@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)

可以使用。