작성
·
203
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 이라는 작업 이후에 코드를 다시 한 번 실행시켜 보면 어떨까 싶습니다! 이 작업은 혹시나 실행되고 있는 코드가 최신 코드를 반영하지 못할 때, 실행되고 있는 임시 코드를 제거해줌으로써 최신 코드를 반영하게 해주는 작업이에요!
clean 작업은 오른쪽에서 gradle 선택 > Tasks > build > clean 에서 찾으실 수 있고, 더블클릭 하시면 됩니다.
꼭 해결되셨으면 좋겠네요! 감사합니다. 🙏
해결된거같아요! 감사합니다!