【问题标题】:Why my query return empry list and gives no error? Java Spring Jpa Repository为什么我的查询返回空列表并且没有错误? Java Spring Jpa 存储库
【发布时间】:2021-10-24 02:14:28
【问题描述】:

这是我的实体类:

package com.test.model;

import java.sql.Timestamp;

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

import com.fasterxml.jackson.annotation.JsonFormat;

@Entity
@Table(name = "Ergebnisse")
public class Ergebnisse{
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @Column(name = "messwert")
    private double Messwert;
    
    @Column(name = "einheit")
    private String Einheit;
    
    @Column(name = "material")
    private String Material;
    
    @Column(name = "laboreingangsdatum")
    @JsonFormat(pattern="yyyy-MM-dd")
    private Timestamp Laboreingangsdatum;
    
    @Column(name = "status")
    private String Status;
    
    @Column(name = "parameter")
    private String Parameter;

    public int getId() {
        return id;
    }

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

    public double getMesswert() {
        return Messwert;
    }

    public void setMesswert(double messwert) {
        Messwert = messwert;
    }

    public String getEinheit() {
        return Einheit;
    }

    public void setEinheit(String einheit) {
        Einheit = einheit;
    }

    public String getMaterial() {
        return Material;
    }

    public void setMaterial(String material) {
        Material = material;
    }

    public Timestamp getLaboreingangsdatum() {
        return Laboreingangsdatum;
    }

    public void setLaboreingangsdatum(Timestamp laboreingangsdatum) {
        Laboreingangsdatum = laboreingangsdatum;
    }

    public String getStatus() {
        return Status;
    }

    public void setStatus(String status) {
        Status = status;
    }

    public String getParameter() {
        return Parameter;
    }

    public void setParameter(String parameter) {
        Parameter = parameter;
    }
    
    
    
}

这是我的存储库:

package com.test.repository;


import java.util.List;


import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.test.model.Ergebnisse;

@Repository
public interface ErgebnisseRepository extends JpaRepository<Ergebnisse,Integer> {

    @Query("FROM Ergebnisse where Material=:Material")
    List<Ergebnisse> findMaterial(@Param("Material") String Material);

}

还有我的控制器:

package com.test.controllers;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.test.load.ErgebnisseRequest;
import com.test.model.Ergebnisse;
import com.test.repository.ErgebnisseRepository;

@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/api")
public class ErgebnisseController {
    
    @Autowired
    ErgebnisseRepository repository;
    

    @RequestMapping(value="/ergebnisse", method=RequestMethod.GET)
    public List<Ergebnisse> getData(ErgebnisseRequest request){
        
        
        List<Ergebnisse> ergebnisseList = repository.findAll();
        
        return ergebnisseList;
        
        
    }
    
    @RequestMapping(value="/search", method=RequestMethod.GET)
    public List<Ergebnisse> Search(ErgebnisseRequest request){
        
        
        List<Ergebnisse> ergebnisseList = repository.findMaterial(request.getMaterial());
        
        return ergebnisseList;
        
        
    }

这是我的数据库: My Database

编辑: 这是我的 ErgebnisseRequest 课程:

package com.test.load;

import java.sql.Timestamp;

import javax.persistence.Column;

import com.fasterxml.jackson.annotation.JsonFormat;

public class ErgebnisseRequest {
    
    @Column(name="material")
    private String material;
    
    
    

    public String getMaterial() {
        return material;
    }

    public void setMaterial(String material) {
        this.material = material;
    }


}

所以 repository.findAll() 为我提供了数据库中的所有数据。但是当我尝试按 Material 搜索时,它给了我一个空列表并且没有错误。我尝试了所有这些,例如将大写字母更改为小写等。我们将不胜感激。

这是 Postman 中的照片: find by Material test

【问题讨论】:

  • 您可以在项目中启用 sql 日志记录,并查看您尝试按材料获取时创建的 sql。你会在那里找到一些见解。 baeldung.com/sql-logging-spring-boot 。如果还有问题,可以分享 sqls。
  • ErgebnisseRequest 的代码是什么?它与 Postman 有效载荷匹配吗?尝试在控制器中设置断点来验证请求。
  • @AndrewS 我将 ErgebnisseRequest 添加到您现在可以看到的问题中。
  • 您是否尝试将您的@Query 更改为@Query("SELECT * FROM Ergebnisse where Material=:Material")
  • 尝试在邮递员中将请求正文中的“Material”属性更改为“material”(小写M)并告诉我们结果

标签: java mysql spring-boot spring-data-jpa


【解决方案1】:

尝试将您的 HTTP 请求从 GET 更改为 POST,以便能够使用您尝试发送的 RequestBody 内容。

例如

@RequestMapping(value="/ergebnisse", method=RequestMethod.POST)
public List<Ergebnisse> getData(@RequestBody ErgebnisseRequest request)

并将您的邮递员请求从 GET 更改为 POST

您仍然可以使用GET,但将内容作为请求参数传递

例如

@RequestMapping(value="/ergebnisse", method=RequestMethod.GET)
public List<Ergebnisse> getData(@RequestParam(name = "material") String material) {

     List<Ergebnisse> ergebnisseList = repository.findMaterial(material);
    
    return ergebnisseList;
}

并在您的邮递员中维护 GET 请求,但将 URL 修改为:

http://localhost:9090/test/api/search?material=Germini

【讨论】:

  • 是的,带有@RequestParam 的第二个运行良好,谢谢。我仍然不知道为什么第一个示例不适用于 get 或 post。再次感谢您!
猜你喜欢
  • 2018-11-09
  • 2021-09-03
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 2021-03-03
  • 2019-06-17
相关资源
最近更新 更多