반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[Spring] @RestController와 @RequiredArgsConstructor 어노테이션으로 ResponseEntity 클래스 사용한 메소드 구현해보기 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/활용해본 코드 적용 예시 (◍•ᴗ•◍)❤

[Spring] @RestController와 @RequiredArgsConstructor 어노테이션으로 ResponseEntity 클래스 사용한 메소드 구현해보기

yeonee 여니 2023. 10. 23. 00:13
728x90
반응형
SMALL

안녕하세요.
#yeoneeblog 여니입니다:)

 

* 자주 사용하는 것은 상단에 변수로 선언하여 사용하기
* 자주 사용하는 것은 클래스 만들어서 사용하기
* 코드를 줄이고 가독성을 높이자
* 인터페이스는 구현해놓은 메소드를 가져다 공유해서 쓸 수 있게 하되, Impl은 나만 볼 수 있게 제외
* Service에 주석 달아주는 것이 정석(그러면 자바코드에서 주석을 확인할 수 있음)
* 작업하다 보면 여러번 고치고 수정할 수 있는 것, 두려워말기~~
* 작업하다 고쳐지지 않는 부분 수정하기 why? 이제는 이 프로젝트를 내가 핸들링하고 있기 때문이다!

[코드]
// new Feed 작성
@PostMapping("/MyFeedModify")
public ResponseEntity<ApiRes> feedEnroll(FeedReq req) {
    String code = "S";
    req.setMember(super.getLoginUser());

    FeedRes result = fService.insertFeedEnroll(req);

    if(result.getResult()  < 2) {
        code = "E";
    }

    return super.setResponse(result.getFeed(), code);
}

[코드 분석]
ApiRes클래스를 생성하여 제네릭 사용
ApiRes클래스의 객체 생성하여 code 사용. 성공시 code = "S" 출력
FeedReq req클래스를 생성하여 Feed생성시 들어가는 요소들 객체 생성
자주 사용되는 loginUser은 상수 LOGIN_USER로 만들어 사용
LOGIN_USER 속성을 Session에 담고 Request에 담아서 값을 반환함
FeedReq req를 매개변수로 주고, req에 loginUser을 담아줌
insertFeedEnroll메소드에 req를 매개변수로 주어 fService에 넘겨준 뒤 결과 값을 result에 담아줌
결과가 반환되는 결과 경우의 수가 1(feed생성시)과 2(feedImg생성시)인데,
두 경우의 수가 만족시 조건문을 실행하려면 2보다 작을 경우 error가 나는 조건문을 만들어 에러시에는 code = "E"출력
우리는 Feed의 결과값을 볼거니까 FeedRes의 객체로 준 result에 Feed결과와 code를 넣어준 것을 반환함

 

[코드]
@PostMapping("/feedEdit")
public ResponseEntity<Feed> feedEdit(HttpSession session, Feed feed, String hashTag,
                       MultipartFile feedImg1,
                       MultipartFile feedImg2,
                       MultipartFile feedImg3,
                       MultipartFile feedImg4,
                       MultipartFile feedImg5,
                       int fno,
                       String deleteList
) {
    Member loginUser = super.getLoginUser();
    feed.setFeedHashtag(hashTag);
    feed.setFeedWriter(loginUser.getUserNo());
    feed.setFeedNo(fno);

    String webPath = "resources/images";
    String severFolderPath = application.getRealPath(webPath+"/");
    List<MultipartFile> upfiles = new ArrayList();
    upfiles.add(feedImg1);
    upfiles.add(feedImg2);
    upfiles.add(feedImg3);
    upfiles.add(feedImg4);
    upfiles.add(feedImg5);
    int result = fService.updateFeed(feed, upfiles, severFolderPath, webPath, deleteList);

    Feed f = new Feed();
    f.setFeedHashtag(hashTag);
    f.setFeedWriter(loginUser.getUserNo());
    f.setFeedNo(fno);
    f.setUpfiles(upfiles);

    if(result > 0) {
        session.setAttribute("alertMsg","게시물 수정 성공!");
        return new ResponseEntity<>(f, HttpStatus.OK);
    }else {
        session.setAttribute("alertMsg","게시물 수정 실패!");
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

[코드분석]
* super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는 데 사용되는 참조 변수입니다. 멤버 변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버와 이름이 같을 때는 super를 붙여서 구별할 수 있습니다.

BaseController에서 상속받아 온 loginUser값을 사용함
feedHashtag를 hashTag로, feedWriter를 loginUser로, feedNo를 fno로 feed에 값들을 담아줌 
String 타입의 webPath에 resources/images 경로로 변수를 선언해줌
String 타입의 severFolderPath에 webPath+"/"한 값을 RealPath로 가져오고 그 값을 application에 담아주며 이를 변수로 선언함
스프링에서 제공하는 MultipartFile 이라는 인터페이스를 제네릭으로 이용해서, HTTP multipart 요청을 처리할 것임
feedImg1~5를 upfiles리스트에 담아줌. feed, upfiles, severFolderPath, webPath, deleteList를 updateFeed에 담아주고 그 결과 값을 fService에게 주어 DB에서 불러온 값을 result로 지정해줌. Feed타입의 객체 f를 생성하여 거기에 feedHashtag를 hashTag로, feedWriter를 loginUser로, feedNo를 fno로, upfiles를 upfiles로 f에 결과값들을 담아줌
이 결과값이 발생하면 result는 1이 될 것이며, 이 조건을 이용하여 if조건문을 만들어 1일 경우 게시물 수정이 성공하고 해당 f값을 반환할 것임. 결과값이 발생하지 않았다면 result는 0이 되며 게시물 수정은 실패하고 error창을 반환할 것임.  

728x90
반응형
LIST