Why my query return empry list and gives no error? Java Spring Jpa Repository



Here is my entity class:

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

Here is my Repository:

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);

}

And my controller:

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

Here is my Database: My Database

Edit: Here is my ErgebnisseRequest class:

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


}

So the repository.findAll() gives me all the data from the database. But when i am trying to search by Material it gives me a emptylist and no error. I try all of it like changing the uppercase letters to lowercase etc.. and help would be appreciated.

Here is the photo of it in Postman: find by Material test

Answer

Try changing your HTTP request from GET to POST in order to be able to consume the RequestBody content you are trying to send.

e.g.

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

and change your postman request from GET to POST

OR

you can still use GET but pass the content as request parameter

e.g.

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

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

and in your postman maintain the GET request but modify the URL to:

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


Source: stackoverflow