java之如何在 springboot API 中自定义来自@query 的响应
zhwl
阅读:40
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,
但事实并非如此。
非常感谢您的帮助, 再见
更新
请您参考如下方法:
按照此处的步骤操作
在这里,我想告诉你如何简单地做到这一点
- 更改查询,它应该返回列表
@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
- 将“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){
}
- 内部 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
}
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。