• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

8강 재질문입니다 (코드포함) (해결)

24.01.30 15:04 작성 24.01.31 17:08 수정 조회수 121

0

코드를 다시 찬찬히 살펴봐도 틀린게 뭔지 모르겠어요...

시간나시면 검토 가능 하실까요? 아니면 처음부터 다시 코딩을 해봐야겠네요

////

package com.group.libraryapp.UserController;

import com.group.libraryapp.domain.user.User;
import com.group.libraryapp.dto.calculator.request.user.response.UserResponse;
import com.group.libraryapp.user.request.UserCreateRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

@RestController
public class UserController {
    private final List<User> users = new ArrayList<>();
    @PostMapping("/user") // POST /user
    public void saveUser(@RequestBody UserCreateRequest request){
    users.add(new User(request.getName(), request.getAge()));
    }

    @GetMapping("/user")
    public List<UserResponse> getUsers(){

        List<UserResponse> responses = new ArrayList<>();
        for(int i=0; i<users.size(); i++){
            responses.add(new UserResponse(i + 1, users.get(i)));
        }//users에 저장한 유져들을 for문으로 userResponse형태로 바꾸어 결과 list에 추가
        return responses;

    }

}

 

package com.group.libraryapp.dto.calculator.request.user.response;

import com.group.libraryapp.domain.user.User;

public class UserResponse {
    private long id;
    private String name;
    private Integer age;

    public UserResponse(long id, User user) {
        this.id = id;
        this.name = user.getName();
        this.age = user.getAge();
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

 

package com.group.libraryapp.domain.user;

public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public User(String name, Integer age) {
        if(name == null || name.isBlank()){
            throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다.", name));
        }
        this.name = name;
        this.age = age;
    }
}

 // 해결했습니다.

강사님께서 화면공유 방법으로 해결해주셨고 말씀해주신 해결방법은

인텔리제이에서 run 후 오류내역에서

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.group.libraryapp.user.request.UserCreateRequest` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]

확인하셨고

UserCreateRequest

클래스에서 기본생성자를 추가하여 해결하였습니다.

매개변수가있는 생성자를 사용하면 추가로 기본생성자를 만드는 습관을 들이겠습니당

답변 1

답변을 작성해보세요.

0

안녕하세요 준영님! 🙏 코드 공유해주셔서 감사합니다. 😊

 

보내주신 코드를 확인해보니 이상이 없었고, (= 코드를 잘 작성해주셨어요!) 실제 코드를 복사해서 제 컴퓨터에서도 돌려본 결과 정상적으로 유저 저장 및 조회가 이루어졌습니다 🙂

image

때문에 현재로서 의심되는 경우의 수는...

  • 서버가 여러개 실행중이었고, 코드가 완성되지 않은 서버로 요청이 가고 있었다

정도인 것 같아요! 코드도 잘 작성하셨고, 실제 동작도 잘 되니까요! 🥺

만약 이 경우라면, IntelliJ를 완전히 종료하시고 컴퓨터 재시작 이후에, IntelliJ를 단 하나만 키신 후 다시 한 번 돌려보았을 때 해결될겁니다!

 

다만,

  1. 보내주신 에러 메시지 및 코드로는 제가 파악할 수 있는 내용에 한계가 있고

  2. 여전히 문제가 발생한다면 준영님께서 정말 답답해 하실 수 있기 때문에

구글 밋 + 화면 공유를 통해 직접 원인을 파악해 드리도록 하겠습니다.

제 메일 choi-0202@naver.com 로 연락 남겨주시면, 빠르게 연락드리겠습니다! 감사합니다 😊