Niemutowalne DTO i Lombok

0

Mam taki kod:

@Value
@Builder
public class RegisterRequest {

    @NotBlank
    @Size(min = 3, max = 15)
    private final String username;

    @NotBlank
    @Size(max = 40)
    @Email
    private final String email;

    @NotBlank
    @Size(min = 6, max = 20)
    @Pattern(regexp = "[/d]+")
    private final String password;

    @Size(max = 40)
    private final String name;
}

Jak wyślę żądanie, to dostaję odpowiedź, że nie można utworzyć obiektu, bo nie ma domyślnego konstruktora, ale jak go dodam, to kod nawet się nie skompiluje. Jak więc DTO mogą być niemutowalne?

0

Poprzez wstrzykiwanie przez konstruktor.
Prawdopodobnie drugi mechanizm (obstawiam Spring) korzysta z field injection, a powinno być constructor injection

2

Jeżeli Twoja klasa to jest obiekt DTO przyjmowany przez backend na podstawie requesta jsonowego. To takie coś powinno załatwić sprawę:


@Value
@Builder
public class RegisterRequest {

    @NotBlank
    @Size(min = 3, max = 15)
    private final String username;

    @NotBlank
    @Size(max = 40)
    @Email
    private final String email;

    @NotBlank
    @Size(min = 6, max = 20)
    @Pattern(regexp = "[/d]+")
    private final String password;

    @Size(max = 40)
    private final String name;

    @JsonCreator
    public RegisterRequest(@JsonProperty("username") String username,
                           @JsonProperty("email") String email,
                           @JsonProperty("password") String password,
                           @JsonProperty("name") String name) {
        this.username = username;
        this.email = email;
        this.password = password;
        this.name = name;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1