【问题标题】:How to retrieve data in spring boot without passing any variable?如何在不传递任何变量的情况下在 Spring Boot 中检索数据?
【发布时间】:2021-12-30 09:01:49
【问题描述】:

如何在不传递任何变量的情况下在 Spring Boot 中检索数据列表。我们只传递 GET 请求的 URL。

例如,在下面的代码中,我传递了“roll no”,它工作正常,它正在获取相应的学生详细信息。

 @GetMapping{"/fetch/{rollNo}")
   
   public List<StudentDetail> findStudentDeatilbyRollNo (@PathVariable String rollNo){
    return StudentService.findStudentDetailByRollNo(rollNo);
  }

但是当我想在不传递参数的情况下获取所有学生数据时,它给了我错误“无法从静态上下文引用非静态方法 'fetchAllStudentDetail()'

@GetMapping{"/allStudentDetails")
   
   public List<StudentDetail> fetchAllStudentDeatil(){
    return StudentService.fetchAllStudentDeatil();
  }

有人,请帮我解决这个问题。

【问题讨论】:

  • 看来findStudentDetailByRollNostatic,而fetchAllStudentDeatil 不是。
  • @Arnaud 是的,但是如果我想在不传递任何变量的情况下获取学生详细信息,解决方案是什么?
  • 把两者都设为静态?
  • @Christopher 怎么做?
  • 只需将 static 关键字添加到方法的签名中,例如 public static List&lt;Student&gt; fetchAllStudentDeatil。此外,当您在这里时,您可能希望修正方法名称中的拼写错误:)。

标签: java spring spring-boot spring-mvc


【解决方案1】:

该错误表示您正在尝试以静态方式调用非静态方法:

要解决此问题,请尝试将此方法设为静态。

StudentService.fetchAllStudentDeatil()

要使其成为静态,请添加 static

public static List<StudentDetail> fetchAllStudentDeatil()

【讨论】:

  • 如何让它成为静态的?
  • 你必须添加静态词@Rajeev
  • 谢谢,但在控制器类中“fetchAllStudentDeatil”是非静态的。我不想将服务、repo 或实体类方法设为静态,因为还有许多其他方法取决于这些类。有没有其他办法?
  • 这应该可以解决问题。
【解决方案2】:

我在您的代码中发现了几个问题,请按照以下步骤解决。

  1. 在您的 RestController 类中自动连接 StudentService

示例 1:

@Autowired  
private StudentService studentService;

示例 2:

private final StudentService studentService;

@Autowired
public RestControllerClassName(StudentService studentService){
    this.studentService = studentService;
}

阅读更多:Spring @Autowire on Properties vs Constructor

  1. StudentService 类中添加@Service

  2. StudentService fetchAllStudentDeatil()findStudentDetailByRollNo(rollNo) 中的两个方法中删除静态。

  3. 最后在你的 RestController 中,使用 studentService.fetchAllStudentDeatil()studentService.fetchAllStudentDeatil(rollNo)

  4. 可选,更正Deatil中的错字

【讨论】:

    【解决方案3】:

    您需要在学生服务中定义函数 fetchAllStudentDeatil,以便检索表中的所有条目;

    static List<Student> fetchAllStudentDeatil {     return studentRepo.findAll();  }
    

    还要确保 GetMapping 上的方法不是静态的。如果是这样,请将 fetchAllStudentDeutil 设为静态。

    【讨论】:

    • 我已经在学生服务中定义了 fetchAllStudentDeutil。如何使 fetchAllStudentDeutil 静态化。
    • 通过在方法定义中添加关键字static。我已经更新了我的答案。让我知道它是否有帮助或其他错误仍然存​​在
    • Singh 谢谢,但是在控制器类中“fetchAllStudentDeatil”是非静态的。我不想将服务、repo 或实体类方法设为静态,因为还有许多其他方法取决于这些类。有没有其他办法?
    • 请分享您的控制器类、学生服务和 repo。会更容易提供帮助。话虽如此,当我们尝试从静态代码块访问非静态方法时,通常会出现您引用的错误。
    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 2021-02-04
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多