java之如何在 springboot API 中自定义来自@query 的响应

zhwl 阅读:31 2023-08-29 19:03:55 评论:0

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

而我的接口(interface) OnlyName 是空的。 当我像那样使用它时,它是对的,我不能得到简单的响应

喜欢:

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

我知道我来自@query 的回复是字符串,这就是为什么我只得到一个结果,但是我应该如何更改才能获得所有字符串或类似的东西?也许字符串[]?

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

1. imie, 
2. nazwisko,  

但事实并非如此。

非常感谢您的帮助, 再见

更新

请您参考如下方法:

按照此处的步骤操作

在这里,我想告诉你如何简单地做到这一点

  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. 将“public Ksiazka find”中的返回类型更改为列表
@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. 内部 body 尝试将结果作为列表,
@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 
 
       } 


标签:Spring Boot
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号