Spring Boot @Autowired 字段返回 .NullPointerException (使用 neo4J)

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

我正在使用 spring-boot 和 Neo4J 制作一个小型 api,但由于某种原因,域的

@autowired
属性在我的
@Service
类之一中为空。自动生成的路由正确地从 Neo4J 数据库返回节点,所以我认为它们一定是 beans 连接中的一些错误

控制器:

@RestController
public class NodeController {
    @PostMapping("/metrics")
    public MetricJSON computeMetrics(
            @Valid @RequestBody MetricsPayload payload,
            @Autowired SocialNetwork socialNetwork
    ) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
        return new MetricJSON(socialNetwork.fromRequest(payload));
    }

@Service
班级

@Service
public class SocialNetwork  {
    @Autowired
    public NetworkRepository networkRepository;

    @Autowired
    public NodeRepository nodeRepository;

    @Autowired
    public Evolution evolution;

    public PersonalNetwork fromRequest(@NotNull MetricsPayload payload) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
        Network network = this.networkRepository.findById(payload.getNetworkId()).orElseThrow(NotFoundException::new);
        Node ego = this.nodeRepository.findByTag(payload.getEgoTag()).orElseThrow(NotFoundException::new);
SimpleWeightedGraph<Integer, DefaultWeightedEdge> opn = this.nodeRepository.extractOPN(ego, payload.getDepth());
        return this.fromGraph(opn, ego, payload);
}

Node 域类:

@org.springframework.data.neo4j.core.schema.Node("Node")
public class Node {
    @Id
    private String id;
    @Property("tag")
    private String tag;
    @Relationship(type = "FROM", direction = OUTGOING)
    private Set<Node> outgoingNodes;
    @Relationship(type = "TO", direction = INCOMING)
    private Set<Node> incomingNodes;
    public String getTag() {
        return tag;
    }

    public Set<Node> getOutgoingNodes() {
        return outgoingNodes;
    }

NodeRepository 类:

public interface NodeRepository extends Neo4jRepository<Node, String> {
    Optional<Node> findByTag(String tag);
}

然而,当我运行 API 时,我收到此错误:

Failed to complete request: java.lang.NullPointerException: Cannot invoke "com.api.repositories.NodeRepository.findByTag(String)" because "this.nodeRepository" is null

java spring-boot spring-data-neo4j
1个回答
0
投票

在控制器方法中使用

@Autowired
注释不起作用。您需要将它们自动装配到类本身中。例如:

@RestController
public class NodeController {
    @Autowired
    private SocialNetwork socialNetwork; // Add this

    @PostMapping("/metrics")
    // Remove the SocialNetwork parameter from computeMetrics()
    public MetricJSON computeMetrics( 
            @Valid @RequestBody MetricsPayload payload
    ) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
        return new MetricJSON(socialNetwork.fromRequest(payload));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.