티스토리 뷰
지난 한주동안에는 스프링 배우시는분들과 함께 기본 crud api를 작성해서
각자 맡은 파트를 수행해서 깃허브로 협업해보는 한주였다.
나는 게시물 작성하는 부분을 맡았다.
컨트롤러 부분.
@RestController
@RequiredArgsConstructor
@RequestMapping({"/article"})
public class ArticleController {
private final ArticleService articleService;
@GetMapping
public ResponseDto<?> selectAll() {
return articleService.findAllArticle();
}
@PostMapping
public ResponseDto<?> article(@RequestBody ArticleRequestDto requestDto, @AuthenticationPrincipal MemberDetailsImpl memberDetails) {
return articleService.article(requestDto, memberDetails);
}
@GetMapping({"/{articleId}"})
public ResponseDto<?> findArticle(@PathVariable("articleId") Long id) {
return articleService.findArticle(id);
}
@PutMapping({"/{articleId}"})
public ResponseDto<?> update(@PathVariable("articleId") Long id, @RequestBody ArticleRequestDto requestDto, @AuthenticationPrincipal MemberDetailsImpl memberDetails) {
return articleService.update(id, requestDto, memberDetails);
}
@DeleteMapping({"/{articleId}"})
public ResponseDto<?> delete(@PathVariable("articleId") Long id, @AuthenticationPrincipal MemberDetailsImpl memberDetails) {
return articleService.delete(id, memberDetails);
}
}
서비스 부분
@Service
@RequiredArgsConstructor
public class ArticleService {
private final ArticleRepository articleRepository;
/*
* 게시글 단일 조회
*/
public ResponseDto<?> findArticle(Long id) {
Article article = articleRepository.findById(id).orElse(null);
if(article == null ) {
return ResponseDto.fail("Invalied id", "Article id를 찾을 수 없음");
}
ArticleResponseDto articleResponseDto = new ArticleResponseDto(article);
return ResponseDto.success(articleResponseDto);
}
/*
* 게시글 전체조회
*/
public ResponseDto<?> findAllArticle() {
List<Article> findArticleList = articleRepository.findAll();
List<ArticleResponseDto> articleResponseDtoList = new ArrayList<>();
for (Article article : findArticleList) {
articleResponseDtoList.add(new ArticleResponseDto(article));
}
return ResponseDto.success(articleResponseDtoList);
}
/*
* 게시글 등록
*/
@Transactional
public ResponseDto<?> article(ArticleRequestDto requestArticle, MemberDetailsImpl memberDetails) {
Article article = new Article(requestArticle, memberDetails.getMember());
articleRepository.save(article);
return ResponseDto.success("성공적으로 저장했습니다.");
}
/*
* 게시글 수정
*/
@Transactional
public ResponseDto<?> update(Long id, ArticleRequestDto requestDto, MemberDetailsImpl memberDetails) {
Article article = articleRepository.findById(id).orElse(null);
if(article == null) {
return ResponseDto.fail("Invalied id", "수정할 게시글이 없음");
}
if(article.getMember().getId().equals(memberDetails.getMember().getId())) {
String title = requestDto.getTitle();
String content = requestDto.getContent();
article.update(title,content);
articleRepository.save(article);
return ResponseDto.success("성공");
} else {
return ResponseDto.fail("수정권한이 없어","수정권한이 없어요");
}
}
/*
* 게시글 삭제
*/
@Transactional
public ResponseDto<?> delete(Long id, MemberDetailsImpl memberDetails) {
Article article = articleRepository.findById(id).orElse(null);
if(article == null) {
return ResponseDto.fail("해당 게시글이 없어요","게시글 없음!");
}
if(article.getMember().getId().equals(memberDetails.getMember().getId())) {
articleRepository.deleteById(id);
return ResponseDto.success("삭제성공");
} else {
return ResponseDto.fail("권한이 없어요","권한없음");
}
}
}
오류 처리에 미흡함이 있는데 그 부분에 있어서는 어떻게 처리를 해줄지 더 생각을 해봐야할거같다.
그리고 react랑 토이프로젝트를 진행함에 있어서 포트가 달라서 생기는 설정에 대한 부분을 해결하기위해
(해당 에러는 CORS 에러라고도 했다.)
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
//.allowedMethods("*")
///exposedHeaders("Authorization","Refresh-Token")
//.allowCredentials(true)//make client read header("jwt-token")
;
}
}
위와 같이 아스타로 다 풀어주긴 했는데 나중에는 localhost:3000 포트로 바꿔서 테스트해볼 예정.
그리고 Rest Api를 restful하게(?) api를 작성함에 있어 기술 매니저님이 말씀해주셨는데 단수 복수 개념으로 생각해보면 좋을거라고 이야기하셨다. Article같은 경우에 Articles로 해당 게시판은 하나만 있을 수 없기때문에 s를 붙여주는게 관례라고 이야기하셨다. Posts, Products 등등..
https://meetup.toast.com/posts/92
REST API 제대로 알고 사용하기 : NHN Cloud Meetup
REST API 제대로 알고 사용하기
meetup.toast.com

'개발 > WIL' 카테고리의 다른 글
| 11.6 WIL (0) | 2022.11.06 |
|---|---|
| 10.30 WIL (0) | 2022.10.30 |
| 10.16 WIL (0) | 2022.10.17 |
| 10.9 한주의 회고 (0) | 2022.10.09 |
| 10.2 한주의 회고 (0) | 2022.10.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- POI
- method
- JPA
- EC2
- 항해99
- DTO
- ssl
- IOC
- joinfetch
- JWT토큰
- querydsl
- Spring
- backoffice
- 코드해석
- ajax
- 김영한
- 협업
- 환경세팅
- badrequest
- python
- DI
- 알고리즘
- java
- instance
- .jks
- JPQL
- 풀텍스트
- EntitiyManagerFactory
- wil
- this
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함