Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @DTO对象内的自动连线-产生NullPointerException_Java_Spring Boot_Spring Mvc - Fatal编程技术网

Java @DTO对象内的自动连线-产生NullPointerException

Java @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

在使用Java的spring boot 2.4.3应用程序上:

我使用DTO从应用程序的域模型构造JSON响应。DTO只是一个普通的java对象

我试图通过@Autowired属性注入我为数据转换创建的一个新类,但在运行时我得到了一个nullPointerException

@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;
    }
}