Java @DTO对象内的自动连线-产生NullPointerException
在使用Java的spring boot 2.4.3应用程序上: 我使用DTO从应用程序的域模型构造JSON响应。DTO只是一个普通的java对象 我试图通过@Autowired属性注入我为数据转换创建的一个新类,但在运行时我得到了一个nullPointerExceptionJava @DTO对象内的自动连线-产生NullPointerException,java,spring-boot,spring-mvc,Java,Spring Boot,Spring Mvc,在使用Java的spring boot 2.4.3应用程序上: 我使用DTO从应用程序的域模型构造JSON响应。DTO只是一个普通的java对象 我试图通过@Autowired属性注入我为数据转换创建的一个新类,但在运行时我得到了一个nullPointerException @Data @NoArgsConstructor public class FetchSupplierDTO { private long id; private String name; priva
@Data
@NoArgsConstructor
public class FetchSupplierDTO {
private long id;
private String name;
private String description;
private String info;
private List<String> tags;
@Autowired
private TagTranslation tagTranslation;
public FetchSupplierDTO(SupplierEntity supplier) {
this.id = supplier.getId();
this.name = supplier.getDisplayName();
this.description = supplier.getGivenDescription();
this.info = supplier.getInfo();
if (supplier.getTags() != null) {
this.tags = tagTranslation.extractTagsFromEntity(supplier.getTags());
}
}
}
@数据
@诺尔格构装师
公共类FetchSupplierDTO{
私人长id;
私有字符串名称;
私有字符串描述;
私有字符串信息;
私有列表标签;
@自动连线
私人标记翻译;
公共供应商(供应商实体供应商){
this.id=supplier.getId();
this.name=supplier.getDisplayName();
this.description=supplier.getGivenDescription();
this.info=supplier.getInfo();
if(supplier.getTags()!=null){
this.tags=tagTranslation.extractTagsFromEntity(supplier.getTags());
}
}
}
@服务
公共类标记翻译{
公共列表提取器标记实体(列表标记实体列表){
List tagStringList=新建ArrayList();
forEach(productTag->{tagStringList.add(productTag.getTag());});
返回标记列表;
}
}
为什么您希望dto包含这样的逻辑,据我所知,dto是纯POJO。但无论如何,如果使用新运算符创建dto对象,或者尝试将FetchSupplierDTO作为组件,则autowire将无法工作。另外,在它上面包括一行:@ConditionalOnBean({TagTranslation.class})。此外,正如H4x9r所指出的,如果您使用新的操作员创建dto的对象,Autowired将不起作用。您可以共享stacktrace吗?事实上,从TagTranslation
查看您的方法,它几乎可以是一个Utils静态方法,而不是您想要注入的方法。@Component@ConditionalOnBean({TagTranslation.class}
无法解决该问题,this.tags
也不会导致NPE,因为它是一个列表,被分配给它一个列表作为方法的返回
@Service
public class TagTranslation {
public List<String> extractTagsFromEntity(List<TagEntity> tagEntityList) {
List<String> tagStringList = new ArrayList<>();
tagEntityList.forEach(productTag -> { tagStringList.add(productTag.getTag()); });
return tagStringList;
}
}