DI-Problem in Spring Boot

walk

Mitglied
Hallo zusammen,

ich habe eine Spring Boot Applikation und scheitere beim Starten der App an folgender Exception:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method UserDTO in .configuration.UserConfiguration required a bean of type 'java.math.BigDecimal' that could not be found.


Action:

Consider defining a bean of type 'java.math.BigDecimal' in your configuration.

Quellcode:

Java:
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

import java.math.BigDecimal;

@Configuration
public class UserConfiguration {

    @Bean
    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    public UserDTO userDTO(BigDecimal value, String name){
        return new UserDTO(value, name);
    }
}

Korrespondierende UserDTO

Java:
import java.math.BigDecimal;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.lang.Nullable;

import javax.validation.constraints.NotNull;

@Data
@Builder
@AllArgsConstructor
public class UserDTO {
    @NotNull
    private BigDecimal value;
    @NotNull
    private String name;

Ich hatte dieses DTO auch mit @Component annotiert und @AllArgsConstructor entfernt (Also wie im Beispiel unten zu UserRequestDTO), ohne Erfolg. Interessanterweise funktioniert es mit einem anderen DTO in dem auch UserDTO liegt, problemlos:

Java:
import java.util.List;

import javax.validation.constraints.NotNull;

import lombok.Builder;
import lombok.Data;
import org.springframework.stereotype.Component;

@Data
@Builder
@Component
public class UserRequestDTO {

    @NotNull
    private List<String> codes;
}

In UserRequestDTO genügt die @Component-Annotation, ich benötige nichtmal eine Konfigurationsklasse. Ich hatte auch schon probiert die Annotation nur in UserDTO anzugeben, ebenso ohne Erfolg.

Projektstruktur:

com.test.api
├── configuration
│ ├── UserConfiguration.java

├── dto
│ ├── UserDTO.java
│ ├── UserRequestDTO.java
├── Application.java

Dependencies:
Code:
plugins {
    id 'org.springframework.boot' version '2.7.3'
    id 'io.spring.dependency-management' version '1.0.13.RELEASE'
    id 'java'
}

dependencies {

    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.google.code.findbugs:jsr305:3.0.2'

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    implementation "io.springfox:springfox-boot-starter:3.0.0"
    implementation 'javax.validation:validation-api:2.0.1.Final'
    implementation "com.h2database:h2:1.4.200"

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}
 

thecain

Top Contributor
Wie stellst du dir denn vor wie das funktionieren soll? Woher sollte der Wert für BigDecimal und Name kommen?

Und warum willst du das dein Dto ein Bean ist?
 

walk

Mitglied
Wie stellst du dir denn vor wie das funktionieren soll? Woher sollte der Wert für BigDecimal und Name kommen?

Das schlimme ist, ich wusste ab einem gewissen Zeitpunkt selbst nicht mehr was ich tue. Ich bin relativ neu in Spring und arbeite zum ersten Mal mit Lombok.

Ich werde nochmal die Grundlagen durchackern müssen.

Folgendes funktioniert:


Java:
import java.math.BigDecimal;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.lang.Nullable;

import javax.validation.constraints.NotNull;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Component
public class UserDTO {
    @NotNull
    private BigDecimal value;
    @NotNull
    private String name;
}
 

thecain

Top Contributor
Ja, weil ein Noargs Constructor vorhanden ist und dani der @Component Annotation das Dto ein Bean ist.

Und "funktioniert" heisst wohl auch nur "kompiliert". Ich sehe keinen Grund warum dein DTO ein Besn sein müsste.

Ich werde nochmal die Grundlagen durchackern müssen.
Ist eine gute Idee. Vielleicht sogar im ersten Schritt noch auf Lombok verzichten.
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. einfach einmal eine ganz grobe Beschreibung was denn so ein Bean / Component / Repository / .... ist. Das wird jetzt nur eine ganz grobe Sichtweise mit einigen Ungenauigkeiten.

In der Spring Applikation gibt es einige aktive Komponenten, die irgendwas machen.
Typische Beispiele, über die man bei einer Spring Boot Applikation stolpert sind da:
  • Repositories - das sind Komponenten, die Daten bereit stellen.
  • Controller - Das sind Komponenten, die Anfragen (i.d.R. von außen) annehmen und diese beantworten (z.B. Ein RestController bei einem WebService.)
  • Services - Das sind dann Komponenten, die irgend einen Service erbringen.
...

Wenn Du eine Applikation schreibst, dann wäre es normalerweise notwendig, dass Du als Entwickler alles genau schreiben musst: Es soll irgendwas gestartet werden, es soll bei einem Request irgendwas passieren, ....
Und Du musst Dich um Abhängigkeiten kümmern. Dein UserService, der die Benutzer verwaltet braucht ein Repository um auf die Datenbank zu zu greifen. Der Controller, der User Requests bearbeiten soll, braucht den UserService ... Um all das muss man sich kümmern.

Und all das vereinfacht Spring Boot. Da werden zum Beispiel alle Klassen gescannt. Wenn da nun bei einer Klasse gesagt wird, dass da bestimmte Requests behandelt werden soll, dann kümmert sich Spring Boot da z.B. drum. Da muss man also sonst gar nichts machen.
Und auch bei den Abhängigkeiten: Da alle Klassen gescannt werden, kann es sich bestimmte Klassen merken. Alle @Component und co werden z.B. gemerkt. Und es wird analysiert: Denn Spring Boot möchte davon eine Instanz erstellen können. Das kann dann so weit gehen, dass da sogar für ein Interface eine Implementation erstellt wird.

Und das sind dann Dinge, von denen es in der Regel immer nur genau eine Instanz gibt. Das ist also schon ein Merkmal, das Du Dir merken kannst. UserDTO willst Du ja ganz viele haben. Das sieht also erst einmal nicht nach einer Komponente aus.

Was es da als einen zweiten großen Bereich gibt, sind dann die Entities. Die Datenklassen. POJOs. ... Es gibt viele Bezeichnungen. Auch DTO.

Das ist also komplett vom anderen getrennt. (Wir ignorieren einfach einmal komplett die Geschichte - vor 20 Jahren gab es auch EntityBeans und da hat man Entities per JNDI ansprechen/laden können und so ... Je nachdem, was Dir so gefällt, war das halt eine Aktion von Sauron ... oder eine Versuchung von der bösen Seite der Macht. Wurde dann aber durch das Schmieden des Schwertes Hibernate bzw. durch den jungen Jedi Hibernate besiegt. Und das Reich JPA war damit dann gerettet!)

Diese Entities bilden unser Model. Das sind Daten, die transferiert werden können. Das sollte aber vom Namen her schon klar sein. Und da sollte eigentlich User ausreichen - das DTO ist da unnötig. Namen mit DTO habe ich nur, wenn ich einen User habe in meinem Model aber nach außen gebe ich nur einen Teil der Daten. Dann gibt es bei mir ein UserDTO. Und dann gibt es eine Klasse, die für die Umwandlung zuständig ist: User -> UserDTO bzw. UserDTO -> User. Das aber nur etwas am Rande - das ist ein Clean Code Aspekt, den jeder für sich selbst entscheiden sollte.

Ich hoffe, dass diese Sichtweise etwas geholfen hat und ich hoffe, dass ich mit den Ungenauigkeiten / Vereinfachungen in einem Bereich geblieben bin, der nicht zu einem großen Aufschrei führt :)

Edit: kleine Typos / Verbesserungen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Spring Security/Boot/Vaadin Cookie Problem bei iFrame Frameworks - Spring, Play, Blade, Vaadin & Co 4
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
J Spring Boot Autowired Problem Frameworks - Spring, Play, Blade, Vaadin & Co 2
E Tomcat mit Hibernate und Spring - Problem mit Connection Pool Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring property problem Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Problem bei Velocity und Spring Validation Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Problem mit Spring LTW Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Axis2 1.6 + Spring -> ClassLoader Problem Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Problem mit spring und log4j Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Problem mit spring security Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Problem mit Hibernate und Spring Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Problem mit Gilead und Spring Frameworks - Spring, Play, Blade, Vaadin & Co 1
tfa Problem mit Maven, Tomcat, Spring und XML-Schema Frameworks - Spring, Play, Blade, Vaadin & Co 0
A Problem mit Spring-WS und Marshalling Frameworks - Spring, Play, Blade, Vaadin & Co 0
H file upload problem mit spring Frameworks - Spring, Play, Blade, Vaadin & Co 33
H Spring: Problem mit CommandClass in SimpleFormController (aus Step-by-Step Tutorial) Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring: Problem beim ausführen eines JUnit Tests. Frameworks - Spring, Play, Blade, Vaadin & Co 4
dunhillone Problem mit Spring & Hibernate Sessions Frameworks - Spring, Play, Blade, Vaadin & Co 2
dunhillone Problem mit Spring & Hibernate Sessions Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Spring DM: Problem mit Tomcat als OSGI-Service Frameworks - Spring, Play, Blade, Vaadin & Co 2
chik Spring ACEGI Problem Frameworks - Spring, Play, Blade, Vaadin & Co 1
M JSF Navigation - Spring Security Logout Problem Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Problem beim Mocken Frameworks - Spring, Play, Blade, Vaadin & Co 9
Z Versuch mit Rest-Api-Tester geben offenbar ein lib Problem Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Backtracking (Springer-Problem) Frameworks - Spring, Play, Blade, Vaadin & Co 6
E Springerproblem - Problem Frameworks - Spring, Play, Blade, Vaadin & Co 1
NoXiD SpringSecurity Problem Frameworks - Spring, Play, Blade, Vaadin & Co 3
B SpringMVC-EntityManagerFactory-Hibernate-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 1
B SpringLayout Problem Frameworks - Spring, Play, Blade, Vaadin & Co 3
H JSF + SpringSecurity Problem Frameworks - Spring, Play, Blade, Vaadin & Co 2
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Integration - Logging Frameworks - Spring, Play, Blade, Vaadin & Co 7
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Anfänger benötigt Hilfe Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Date keine neue Tabelle fuer Attribut Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring Security Config File anpassen Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Spring Cloud : Resttemplate mit Loadballancer Frameworks - Spring, Play, Blade, Vaadin & Co 11
Dimax Spring resource not found Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Spring MongoDB unique index Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring WebFlux Cors konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Schöne View mit anchor scrolling in Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
Dimax Spring JPA Multiple Keys Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Security mit oauth2 in lokaler Konfiguration principal mocken Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2

Ähnliche Java Themen

Neue Themen


Oben