인프런 커뮤니티 질문&답변

이샘미님의 프로필 이미지

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

에러가 해결이 안돼요ㅜ

작성

·

199

1

에러 : Parameter 0 of constructor in com.group.libraryapp.service.user.UserServiceV1 required a bean of type 'com.group.repository.user.UserJdbcRepository' that could not be found.

 

 

구글링해보니까 service, repository 등의 annotation이 빠져서 그렇다고 하는데 다 들어가있습니다ㅜ

계속 문제가 해결안돼서 참고하라고 주신 코드로도 변경해봤는데 계속 동일한 문제가 뜨네요..

 

package com.group.libraryapp.service.user;

import com.group.libraryapp.dto.user.request.UserCreateRequest;
import com.group.libraryapp.dto.user.response.UserResponse;
import com.group.libraryapp.dto.user.request.UserUpdatRequest;
import com.group.repository.user.UserJdbcRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceV1 {

  private final UserJdbcRepository userJdbcRepository;

  public UserServiceV1(UserJdbcRepository userJdbcRepository) {
    this.userJdbcRepository = userJdbcRepository;
  }

  public void saveUser(UserCreateRequest request) {
    userJdbcRepository.saveUser(request.getName(), request.getAge());
  }

  public List<UserResponse> getUsers() {
    return userJdbcRepository.getUsers();
  }

  public void updateUser(UserUpdatRequest request) {
    if (userJdbcRepository.isUserNotExist(request.getId())) {
      throw new IllegalArgumentException();
    }

    userJdbcRepository.updateUserName(request.getName(), request.getId());
  }

  public void deleteUser(String name) {
    if (userJdbcRepository.isUserNotExist(name)) {
      throw new IllegalArgumentException();
    }

    userJdbcRepository.deleteUser(name);
  }

}

 

package com.group.repository.user;

import com.group.libraryapp.dto.user.response.UserResponse;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public class UserJdbcRepository {

    private final JdbcTemplate jdbcTemplate;

    public UserJdbcRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public boolean isUserNotExist(long id) {
        String readSql = "SELECT * FROM user WHERE id = ?";
        return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, id).isEmpty();
    }

    public void updateUserName(String name, long id) {
        String sql = "UPDATE user SET name = ? WHERE id = ?";
        jdbcTemplate.update(sql, name, id);
    }

    public boolean isUserNotExist(String name) {
        String readSql = "SELECT * FROM user WHERE name = ?";
        return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();
    }

    public void deleteUser(String name) {
        String sql = "DELETE FROM user WHERE name = ?";
        jdbcTemplate.update(sql, name);
    }

    public void saveUser(String name, Integer age) {
        String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
        jdbcTemplate.update(sql, name, age);
    }

    public List<UserResponse> getUsers() {
        String sql = "SELECT * FROM user";
        return jdbcTemplate.query(sql, (rs, rowNum) -> {
            long id = rs.getLong("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            return new UserResponse(id, name, age);
        });
    }

}
package com.group.libraryapp.controller.user;

import com.group.libraryapp.dto.user.request.UserCreateRequest;
import com.group.libraryapp.dto.user.request.UserUpdatRequest;
import com.group.libraryapp.dto.user.response.UserResponse;
import com.group.libraryapp.service.user.UserServiceV2;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController //스프링 빈이 됨. 즉 jdbc에 의존하게됨
public class UserController {

    private final UserServiceV2 userService ;

    //@Quailifier("main")가 primary보다 더 앞선다.
    public UserController(UserServiceV2 userService){
        this.userService = userService;
    }

    @PostMapping("/user")
    public void saveUser(@RequestBody UserCreateRequest request){
       userService.saveUser(request);
    }

    @GetMapping("/user")
    public List<UserResponse> getUsers(){
    return userService.getUsers();
    }

     @PutMapping("/user")
     public void updateUser(@RequestBody UserUpdatRequest request){
        userService.updateUser(request);
    }

     @DeleteMapping("/user")
     public void deleteUser(@RequestParam String name) { //query를 직접 사용해서 포스트맨으로 찾음 그래서 requestbody가 아니라 param을 씀userService.deleteUser(name);
        userService.deleteUser(name );
    }


}

 

답변 1

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요 샘미님!! 계속해서 에러가 발생하다니 답답하시겠어요!! 🥺

제가 코드를 확인해 보았을 때도 문제는 전혀 보이지 않네요! 😭

 

에러 : Parameter 0 of constructor in com.group.libraryapp.service.user.UserServiceV1 required a bean of type 'com.group.repository.user.UserJdbcRepository' that could not be found.

라는 에러는 UserServiceV1 를 스프링 컨테이너가 만들 때 필요한 첫 번째 파라미터인 UserJdbcRepository 를 찾을 수 없다는 에러인데

보내주신 코드에 의하면

  • UserServiceV1@Service 가 잘 붙어 있고

  • UserJdbcRepository@Repository 가 잘 붙어 있어서요!!

 

혹시 clean 이라는 작업 이후에 코드를 다시 한 번 실행시켜 보면 어떨까 싶습니다! 이 작업은 혹시나 실행되고 있는 코드가 최신 코드를 반영하지 못할 때, 실행되고 있는 임시 코드를 제거해줌으로써 최신 코드를 반영하게 해주는 작업이에요!

image

clean 작업은 오른쪽에서 gradle 선택 > Tasks > build > clean 에서 찾으실 수 있고, 더블클릭 하시면 됩니다.

꼭 해결되셨으면 좋겠네요! 감사합니다. 🙏

이샘미님의 프로필 이미지
이샘미
질문자

해결된거같아요! 감사합니다!