작업 상태
- TodoController라는 콘트롤러에서 json으로 데이터를 받아 update하는 과정에서 발생했습니다.
에러 메시지
- java.lang.Error: Unresolved compilation problems:
The method setIsCompleted(String) is undefined for the type Optional<Todo>
The method save(Todo) in the type TodoService is not applicable for the arguments (Optional<Todo>)
원인
Optional<Todo> currentTodo currentTodo의 현재 타입은 Optional<Todo>입니다.
Optional<Todo> 는 Todo 클래스가 아니기 때문에 Todo 클래스의 메소드를 사용할수 없습니다.
증상 발생 코드
@PostMapping("/admin/todos/complete")
public ResponseEntity<String> updateComplete(@RequestBody @Valid Todo todo,
BindingResult result) {
Optional<Todo> currentTodo = todoService.findById(todo.getId());
if (currentTodo.isPresent()) {
currentTodo.setIsCompleted(todo.getIsCompleted());
todoService.save(currentTodo);
return ResponseEntity.ok("저장되었습니다.");
} else {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Working not found");
}
}
처리코드
@PostMapping("/admin/todos/complete")
public ResponseEntity<String> updateComplete(@RequestBody @Valid Todo todo,
BindingResult result) {
Optional<Todo> searchTodo = todoService.findById(todo.getId());
if (searchTodo.isPresent()) {
Todo currentTodo = searchTodo.get();
currentTodo.setIsCompleted(todo.getIsCompleted());
todoService.save(currentTodo);
return ResponseEntity.ok().build();
} else {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Working not found");
}
}
참고
Optional은 Java 8에서 추가된 클래스로, 값이 있을 수도 있고 없을 수도 있는 객체를 감싸는 래퍼 클래스입니다. 이를 통해 NullPointerException 등의 오류를 방지할 수 있습니다. 데이터를 조회해서 가져오는 등의 작업을 할때도 사용됩니다.
메소드
of: 주어진 값으로 Optional 객체를 생성합니다. 값이 null인 경우에는 NullPointerException이 발생합니다.
isPresent: Optional 객체에 값이 있는지 여부를 반환합니다.
get: Optional 객체에 저장된 값을 반환합니다. 값이 없는 경우에는 NoSuchElementException이 발생합니다.
'간단 에러 처리기' 카테고리의 다른 글
Uncaught ReferenceError: process is not defined (0) | 2023.04.20 |
---|---|
Project 'back' is missing required source folder: 'src/main/generated/querydsl' (0) | 2023.04.19 |
Legacy octal literals are not allowed in strict mode. (15:12) (0) | 2023.04.17 |
Uncaught ReferenceError: initialState is not defined (0) | 2023.04.14 |
org.thymeleaf.exceptions.TemplateInputException (0) | 2023.04.13 |