Я создаю Журнал аудита для моего приложения весенней загрузки. Я хочу отслеживать каждый POST-запрос к моему веб-серверу (даже сбои) в БД. Мой код для аудита загромождал мой контроллер. Может кто-нибудь предложить соответствующий шаблон дизайна, чтобы сделать его чистым, универсальным и ремонтопригодным.
@JsonView(View.Student.class)
@PostMapping("/updateStudent")
public Student updateStudent(@Valid @RequestBody final Student studentConfig) {
Student oldStudentDefn =
repository.findById(studentConfig.getStudentId())
.map(Function.identity()).orElse(null);
final AuditBuilder builder = aAuditBuilder().withAction("UPDATE")
.withSource("GUI")
.withBeforeObj(oldStudentDefn)
.withAfterObj(studentConfig);
try{
if(repository.save(studentConfig)) {
builder.withStatus("Success");
} else {
throw new ApplicationException(" Student Save failed");
}
}catch(ApplicationException e) {
builder.withStatus("Failure");
throw e;
}
finally {
auditService.save(builder.build());
}
}
Я хочу рефакторинг таким образом, чтобы этот повторяющийся конструктор try-catch для каждой конечной точки отправлялся в общую службу и был достаточно универсален для принятия любого типа объекта, поэтому что даже конечные точки Teacher, Section, ProgressReport и т. д. также могут быть проверены путем вызова той же службы, но она не должна иметь дублирования кода.