NullPointerException:无法调用“org.modelmapper.ModelMapper.map(Object,java.lang.Class)”,因为“this.modelMapper”为空

问题描述 投票:0回答:1

我有一个地图绘制器

@Component
public class DTOmapper {

    private final ModelMapper modelMapper;

    public DTOmapper(ModelMapper modelMapper) {
        this.modelMapper = modelMapper;
    }

    UserDTO convertUserToDTO(account.User user) {
        // here we make use of the 3rd party library to transform a User into a UserDTO
        return modelMapper.map(user, UserDTO.class);
    }

}

我正在尝试使用它:

@RestController
public class AccountController {

    @PostMapping("/api/auth/signup")
    public ResponseEntity<UserDTO> postAuthSignUp(@RequestBody account.User user, @Autowired DTOmapper dTOmapper) {
        if(user.email().endsWith("@acme.com")
        ) {
            return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body( dTOmapper.convertUserToDTO(user) );
        }else{
            return ResponseEntity.badRequest().build();
        }
    }
}

我明白了

java.lang.NullPointerException: Cannot invoke "org.modelmapper.ModelMapper.map(Object, java.lang.Class)" because "this.modelMapper" is null
    at account.DTOmapper.convertUserToDTO(DTOmapper.java:12) ~[classes/:an]

为什么以及如何解决?

用户是一条记录

public record User(String name, String lastname, String email, String password) {
}
java spring-boot dependency-injection nullpointerexception
1个回答
0
投票

您可能忘记将“@Autowired”放入“@Component”的类构造函数中。

@Autowired
public DTOmapper(ModelMapper modelMapper) {
    this.modelMapper = modelMapper;
}

您可以在以下链接中看到解释:https://www.baeldung.com/constructor-injection-in-spring

© www.soinside.com 2019 - 2024. All rights reserved.