Mapstruct machen @Component zu seinen Implementierungen-und ermöglicht gleichzeitig eine Initialisierung ohne Feder ohneJava

Java-Forum
Anonymous
 Mapstruct machen @Component zu seinen Implementierungen-und ermöglicht gleichzeitig eine Initialisierung ohne Feder ohne

Post by Anonymous »

Stellen Sie sich vor, ich möchte, dass meine Mapstruct-Mapper von Feder geführt werden. Ich möchte jedoch nicht den gesamten Frühlingskontext starten, um dies zu tun. Oder sogar ein winziger Kontext, der nur die Mapper hat. Ich möchte die Mapper in Einheit testen und das Frühling völlig nicht bewusst sein. Die Fabrik (die ich in meinem Einheitstest tun möchte) würde nicht initialisiert. Oder bin ich falsch?

Code: Select all

import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
public class UserRequestDto {

private Long id;
private String name;
private List emailData;
}
< /code>
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Entity
@Getter
@Setter
@Table(name = "\"user\"")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany
private List emailData;
}
< /code>
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@Table(name = "email_data")
public class EmailData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// a back reference to user is omitted for irrelevance
private String email;
}
< /code>
import org.mapstruct.Mapper;

@Mapper(uses = EmailMapper.class, componentModel="spring")
public interface UserMapper {
User toUser(UserRequestDto userRequestDto);
}
< /code>
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

@Mapper
public interface EmailMapper {
@Mapping(source = ".", target = "email")
EmailData toEmailData(String email);
}
< /code>
import com.example.pixel_user_api.data.dto.request.UserRequestDto;
import com.example.pixel_user_api.data.entity.User;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

class UserMapperTest {
@Test
void testMapper() {
UserRequestDto userDto = new UserRequestDto();
userDto.setId(123L);
userDto.setName("Steve123");
String email = "steve@gmail.com";
userDto.setEmailData(List.of(email));

UserMapper mapper = Mappers.getMapper(UserMapper.class);
User user = mapper.toUser(userDto); // throws NPE
}
}
< /code>
java.lang.NullPointerException: Cannot invoke "com.example.pixel_user_api.mapper.EmailMapper.toEmailData(String)" because "this.emailMapper" is null

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post