如何在Springboot API中自定义来自@query的响应

时间:2019-09-17 13:58:33

标签: java mysql json api spring-boot

我在SpringBoot中的API @query响应有问题。

首先,我将向您展示我的代码:

@RestController
@RequestMapping("/api/osoba")
public class APIController {

@Autowired
private KsiazkaRepo ksiazkaRepo;

@JsonView(OnlyName.class)
@RequestMapping(method = RequestMethod.POST, value = "/getAll")
public Ksiazka find(@RequestParam("id") int id){
    String autor = ksiazkaRepo.findInfoById(id);
    Ksiazka ksiazka = new Ksiazka();
    ksiazka.setAutor(autor);
    return ksiazka;
}

**@Repository
public interface KsiazkaRepo extends JpaRepository<Ksiazka, Integer> {

    @Query(value = "SELECT ksiazka.tytul, ksiazka.autor FROM IEci8d0gZc.ksiazka WHERE ksiazka.id_ksiazka = :id", nativeQuery = true)
    String findInfoById(@Param("id") int id);

}**

@Entity
@Validated
public class Ksiazka {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idKsiazka;
private int idKategoria;
private String isbn;
@JsonView(OnlyName.class)
private String tytul;
@JsonView(OnlyName.class)
private String autor;
private int stron;
private String wydawnictwo;
private int rokWydania;
private String opis;


public Ksiazka(){ }

public Ksiazka(int idKsiazka, int idKategoria, String isbn, String tytul, String autor, int stron, String wydawnictwo, int rokWydania, String opis) {
    this.idKsiazka = idKsiazka;
    this.idKategoria = idKategoria;
    this.isbn = isbn;
    this.tytul = tytul;
    this.autor = autor;
    this.stron = stron;
    this.wydawnictwo = wydawnictwo;
    this.rokWydania = rokWydania;
    this.opis = opis;
}

public int getIdKsiazka() {
    return idKsiazka;
}

public void setIdKsiazka(int idKsiazka) {
    this.idKsiazka = idKsiazka;
}

public int getIdKategoria() {
    return idKategoria;
}

public void setIdKategoria(int idKategoria) {
    this.idKategoria = idKategoria;
}

public String getIsbn() {
    return isbn;
}

public void setIsbn(String isbn) {
    this.isbn = isbn;
}

public String getTytul() {
    return tytul;
}

public void setTytul(String tytul) {
    this.tytul = tytul;
}

public String getAutor() {
    return autor;
}

public void setAutor(String autor) {
    this.autor = autor;
}

public int getStron() {
    return stron;
}

public void setStron(int stron) {
    this.stron = stron;
}

public String getWydawnictwo() {
    return wydawnictwo;
}

public void setWydawnictwo(String wydawnictwo) {
    this.wydawnictwo = wydawnictwo;
}

public int getRokWydania() {
    return rokWydania;
}

public void setRokWydania(int rokWydania) {
    this.rokWydania = rokWydania;
}

public String getOpis() {
    return opis;
}

public void setOpis(String opis) {
    this.opis = opis;
}

我的接口OnlyName为空。 当我像这样正确使用它时,我无法得到简单的响应

赞:

{
    "tytul": null,
    "autor": "Mistrz czystego kodu. Kodeks postępowania profesjonalnych programistów,Robert C. Martin"
}

我知道我来自@query的响应是在String中,这就是为什么我只得到一个结果的原因,但是我应该如何更改以获取所有String或类似的东西?也许是String []?

我还可以创建2个不同的自定义询问@query并从中获取

1. imie,
2. nazwisko, 

但事实并非如此。

非常感谢您的帮助, iao

更新

enter image description here

1 个答案:

答案 0 :(得分:1)

按照此处的步骤

在这里,我试图告诉您如何简单地做到这一点

  1. 更改查询,它应该返回列表
    @Query(value = "SELECT ksiazka.tytul, ksiazka.autor FROM IEci8d0gZc.ksiazka WHERE ksiazka.id_ksiazka = :id", nativeQuery = true)
    List<String> findInfoById(@Param("id") int id); // here you can return result as list

  1. 在“公开Ksiazka查找”中将返回类型更改为列表
@RestController
@RequestMapping("/api/osoba")
public class APIController {

@Autowired
private KsiazkaRepo ksiazkaRepo;

@JsonView(OnlyName.class)
@RequestMapping(method = RequestMethod.POST, value = "/getAll")
    public List<Ksiazka> find(@RequestParam("id") int id){
}
  1. 体内尝试获取结果作为列表
@RestController
@RequestMapping("/api/osoba")
public class APIController {

@Autowired
private KsiazkaRepo ksiazkaRepo;

@JsonView(OnlyName.class)
@RequestMapping(method = RequestMethod.POST, value = "/getAll")
    public List<Ksiazka> find(@RequestParam("id") int id){
     List<String> autor = ksiazkaRepo.findInfoById(id); // get result as as  list
     List<Ksiazka> ksiazkaList = new ArrayList<>(); // create list from Ksiazka 
     for (String autors : autor) { // returned result you can loop 
    Ksiazka ksiazka = new Ksiazka(); // create Object to Ksiazka

    ksiazka.setAutor(autors);
    ksiazkaList.add(ksiazka); //add created object to List
        }
       return ksiazkaList; // return your list

       }