Trying to run my Spring-boot app and building an app has been failing.
Issue
SpringBoot reports following error at start:
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2024-06-18T15:03:47.336-07:00 ERROR 34766 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in javagram.javagram.web.UserController required a bean of type 'javagram.javagram.service.UserService' that could not be found.
Action:
Consider defining a bean of type 'javagram.javagram.service.UserService' in your configuration.
Code
Following are my classes in package javagram.javagram.
:
service.UserService
package javagram.javagram.service;
import java.util.UUID;
import org.springframework.stereotype.Service;
import javagram.javagram.exception.UserNotFoundException;
import javagram.javagram.model.DTO.request.UserRequest;
import javagram.javagram.model.DTO.response.UserResponse;
import javagram.javagram.model.entity.UserEntity;
import javagram.javagram.repository.UserRepository;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
public UserResponse get(UUID uuid) {
UserEntity entity = userRepository.findById(uuid).orElseThrow(UserNotFoundException::new);
UserResponse response = new UserResponse();
response.setFirstName(entity.getFirstName());
response.setLastName(entity.getLastName());
response.setProfileName(entity.getProfileName());
response.setCreatedAt(entity.getCreatedAt());
response.setEmail(entity.getEmail());
response.setPassword(entity.getPassword());
return response;
}
public UUID create(UserRequest request) {
UserEntity entity = new UserEntity();
entity.setId(UUID.randomUUID());
entity.setFirstName(request.getFirstName());
entity.setLastName(request.getLastName());
entity.setProfileName(request.getProfileName());
entity.setCreatedAt(request.getCreatedAt());
entity.setEmail(request.getEmail());
entity.setPassword(request.getPassword());
userRepository.save(entity);
return entity.getId();
}
public boolean update(UUID uuid, UserRequest userRequest) {
UserEntity entity = userRepository.findById(uuid).orElseThrow(UserNotFoundException::new);
entity.setFirstName(userRequest.getFirstName());
entity.setLastName(userRequest.getLastName());
entity.setProfileName(userRequest.getProfileName());
entity.setCreatedAt(userRequest.getCreatedAt());
entity.setEmail(userRequest.getEmail());
entity.setPassword(userRequest.getPassword());
userRepository.save(entity);
return true;
}
}
web.JavagramApplication
package javagram.javagram.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class JavagramApplication {
public static void main(String[] args) {
SpringApplication.run(JavagramApplication.class, args);
}
}
web.UserController
package javagram.javagram.web;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import javagram.javagram.model.DTO.request.UserRequest;
import jakarta.validation.Valid;
import javagram.javagram.service.UserService;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@Controller
@RequiredArgsConstructor
@RequestMapping("/users")
public class UserController {
private final UserService userService;
@GetMapping("/users/{uuid}")
public ResponseEntity<?> get(@PathVariable UUID uuid) {
return ResponseEntity.ok(userService.get(uuid));
}
@PostMapping("/users")
public ResponseEntity<?> create(@Valid @RequestBody UserRequest request) {
return ResponseEntity.ok(userService.create(request));
}
@PutMapping("/user/{uuid}")
public ResponseEntity<?> update(@PathVariable UUID uuid, @Valid @RequestBody UserRequest userRequest) {
userService.update(uuid, userRequest);
return new ResponseEntity<>(HttpStatusCode.valueOf(200));
}
}
Question
How can the app recognize the missing bean UserService
?
1