当前位置: 首页 > 知识库问答 >
问题:

如何在Spring控制器中使用ID搜索(主键)?

孟乐
2023-03-14

我试图通过传递键从JpaRepository的getOne中按主键搜索

我有一个模型(客户),其中定义了客户的详细信息。我有一个接口服务(CustomerService)及其实现(CustomerServiceImpl,它实现CustomerService)。我还有一个接口存储库(CustomerRepository),它扩展了JpaRepository。现在在我的控制器中,我将id传递给函数(findCustomerById),并使用JpaRepository的getOne从客户存储库中获取具有该id的客户

Customer=customerRepository。getOne(id);

我不断收到一个错误(java.lang.NullPointerException:null)。我的代码似乎没问题。会是什么问题?Customer.java

package com.javadevjournal.customer;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="customer")
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;

    @Column(name="address")
    private String address;

    public Customer() {
        super();

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

客户存储。java:

package com.javadevjournal.customer;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CustomerRepository extends JpaRepository<Customer, Long>{

}

CustomerController。java:

package com.javadevjournal.customer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriComponentsBuilder;
import com.javadevjournal.customer.CustomerService;

import javax.validation.Valid;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@RestController
public class CustomerController {

    @Autowired
    private CustomerService  customerService;
    private CustomerRepository customerRepository;

    @GetMapping(path = "/customers")
    public Iterable<Customer> findAll() {
        Iterable<Customer> customers = customerService.findAll();
        return customers;
    }

    // Get a Single Customer
    @GetMapping(path = "/getCustomer/{id}")
    public Customer findCustomerById(@PathVariable("id") Long id) {
        System.out.println("Am going on here...");
        System.out.println("id=="+id);
        System.out.println("fetching customers.."+id);
        Customer customer=customerRepository.getOne(id);
        System.out.println(customer);
        return customer;
    }

    // Create a new Customer
    @PostMapping("/customers")
    public Customer createCustomer(@Valid @RequestBody Customer customer) {
        return customerRepository.save(customer);
    }


}

我希望根据邮递员传递的ID获得特定客户(http://localhost:8080/getCustomer/1)但邮递员给了我以下错误消息:

共有2个答案

王宏深
2023-03-14

正如上面提到的,您错过了@Autowyah注释。另请注意,推荐的摄取方式是抛出类构造函数或setter

@RestController
public class CustomerController {
    private final CustomerService  customerService;
    private final CustomerRepository customerRepository;

    @Autowire
    public CustomerController(CustomerService  customerService, CustomerRepository customerRepository) {
        customerService = customerService;
        customerRepository = customerRepository;
    }

    // the rest of your code
}

很酷的事情,这种DI的工作原理也没有@Autow的注释)

罗兴运
2023-03-14

您已放弃在customerRepository上添加Autowired

@Autowired
private CustomerService  customerService;
@Autowired
private CustomerRepository customerRepository;
 类似资料:
  • 我一直在尝试将文件从rest客户端发送到我的spring控制器。在控制器中,我使用“@requestParam(“file”)MultipartFile file”从客户端获取文件,并使用REST服务注释进行注释,如下所示 我总是得到415媒体类型不支持。在上面的方法中,如果我不给多部分,它给我的结果是完成了,但不是多部分。 所以我可以知道如何发送文件到我的Spring控制器?

  • 我对Spring框架是完全陌生的。我有一个任务是在Spring上制作电话簿应用程序。我需要登记和授权,还有我的电话簿。我有两个控制器,第一个是控制授权和注册的UserController 当我尝试进行身份验证或注册时。新用户我有这样的错误: NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalStateException:映射到HTTP路径“HT

  • 我可以使用android media player播放音频文件。我可以显示进度条和附加的两个按钮来暂停和播放音频曲目。我的问题是我无法使用进度条控制轨迹。我想播放要更新的音频曲目,具体取决于我将进度条拖动到的位置。 下面是我的代码

  • 我正在开发一个使用Spring Boot的项目。我有一个接受GET请求的控制器。 目前,我正在接受对以下类型URL的请求:

  • 问题内容: 我写了一个过滤器函数,它将根据您传递的参数返回数据。我希望控制器具有相同的功能。是否可以在控制器中重用过滤器功能? 到目前为止,这是我尝试过的: 问题答案: 将 $ filter 注入控制器 然后,无论您想在哪里使用该过滤器,都可以像这样使用它: 如果要将参数传递给该过滤器,请使用单独的括号进行处理: 您要过滤的数组在哪里,并且是用于过滤的对象。

  • 但我得到以下错误: 我错在哪里?