강사가 공지를 등록 api 를 작성하였는데 자꾸 403이 떴다.
1. 서버를 안켜서
403 forbidden이 서버를 안켜서 나는 오류였다는거보다 내가 서버를 안키고 이러고있었다는데서 한번 충격.
2. curriculum이 없다고 403 forbidden이 떴다.
token에 포함된 username을 이용해서 curriculum을 가져오도록 api를 작성하였는데 왜 없다고 뜨는걸까...
/Users/sj/Desktop/homeLearn/Home-Learn/src/main/java/project/homelearn/controller/teacher/board/TeacherBoardController.java:27: error: cannot find symbol
.orElseThrow(() -> new ResourceNotFoundException("Curriculum not found"));
^
symbol: class ResourceNotFoundException
location: class TeacherBoardController
혹시나 싶어서 json으로 curriculum을 보내주었지만 여전히 403 forbidden이 떴다.
{ "curriculum": 1, "title" : "공지사항1", "content" : "공지사항입니다만?", "emergency" : false}
함수도 바꿔보고 별 짓을 다했는데, 계속되는 curriculum이 없다고 떴다.
결국 entity를 작성한 팀원을 불러 함께 확인해봤는데, 우리가 만드는 사이트가 매니저가 강사와 학생들을 등록해주고 끝나는것이 아니라
매니저가 강사를 학원에 배치까지 해줘야했다.
내가 매니저를 커리큘럼 테이블에 배정하지 않았기때문에 계속해서 curriculum이 없다고 떴던것..
(역시 모를때는 팀원과 함께하는게 답이다)
아직 프론트 페이지가 없어서 쿼리문으로 직접 배정을 해주니 통신이 성공하였다.
[추가 공부] 사용자에게서 id를 가져오는 방법
package project.homelearn.controller.teacher.board;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import project.homelearn.dto.teacher.board.TeacherBoardCreateDto;
import project.homelearn.service.teacher.TeacherBoardService;
import java.security.Principal;
@RestController
@RequiredArgsConstructor
@RequestMapping("/teachers/boards")
public class TeacherBoardController {
private final TeacherBoardService teacherBoardService;
@PostMapping
public ResponseEntity<?> writeBoard(Principal principal,
@Valid @RequestBody TeacherBoardCreateDto teacherBoardCreateDto) {
// 로그인 id 정보만 받아올 수 있다. name이 우리는 id임
String username = principal.getName();
boolean result = teacherBoardService.createTeacherBoard(username, teacherBoardCreateDto);
// 로그인 id 뿐만 아니라 권한이나 역할 같은 다양한 정보를 가져올 수 있다.
String username = SecurityContextHolder.getContext().getAuthentication().getName();
if (result) {
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
}