2 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
您的問(wèn)題是您的存儲(chǔ)庫(kù)不知道您返回的列類(lèi)型以及如何將它們與您的實(shí)體匹配。首先,您需要更改自定義方法的返回類(lèi)型,如下所示:
@Repository
public interface OsobaRepository extend JpaRepository<Osoba, Integer> {
@Query(value = "SELECT imie FROM osoba WHERE osoba.id = :id",
nativeQuery = true)
String findNameById(@Param("id") int id);
}
現(xiàn)在,如果您想將結(jié)果從String轉(zhuǎn)為Json,在您的OsobaServiceImpl(如果存在)中,您需要?jiǎng)?chuàng)建該類(lèi)的一個(gè)實(shí)例Osoba,填充它并返回到控制器,如下所示:
@Service
public ServiceOsobaImpl implementation ServiceOsoba {
private final OsobaRepository osobaRepository;
@Autowired
public ServiceOsobaImpl(OsobaRepository osobaRepository) {
this.osobaRepository = osobaRepository;
}
// your methods
...
public Osoba findNameById(int id) {
String name = osobaRepository.findNameById(id);
Osoba osoba = new Osoba();
osoba.setName(name);
return osoba;
}
}
還有另一種選擇,當(dāng)您使用一個(gè)字段創(chuàng)建簡(jiǎn)單OsobaDto并使用它時(shí)(類(lèi)比之前的選項(xiàng)):
public OsobaDto implements Serializable {
private String name;
public OsobaDto() {}
//getter and setter
}
@Service
public ServiceOsobaImpl implementation ServiceOsoba {
private final OsobaRepository osobaRepository;
@Autowired
public ServiceOsobaImpl(OsobaRepository osobaRepository) {
this.osobaRepository = osobaRepository;
}
// your methods
...
public OsobaDto findNameById(int id) {
String name = osobaRepository.findNameById(id);
OsobaDto osobaDto = new OsobaDto();
osobaDto.setName(name);
return osobaDto;
}
}
兩個(gè)選項(xiàng)響應(yīng)均為 json 格式。produces = MediaType.APPLICATION_JSON_VALUE當(dāng)然,如果您在控制器方法上方指定(或擁有類(lèi)似的變體)。
更新。如果您使用Osoba類(lèi)并且不想看到null價(jià)值,請(qǐng)執(zhí)行以下操作。創(chuàng)建新界面:
public interface OnlyName {}
下一步是將您的實(shí)體標(biāo)記為@Validated并將字段注釋imie為@JsonView:
@Entity
@Validated
public class Osoba {
// your code
@JsonView(OnlyName.class)
private String imie;
}
和控制器:
@RestController
@RequestMapping("/api/osoba")
public class OsobaAPI {
@Autowired
private OsobaRepo osobaRepo;
@JsonView(OnlyName.class)
@PostMapping
@RequestMapping("/getID")
public Osoba findOsobaById(@RequestParam("id") int id){
String name = osobaRepo.findNameById(id);
Osoba osoba = new Osoba();
osoba.setImie(name);
return osoba;
}
}

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
我確實(shí)像你說(shuō)的那樣,我有類(lèi)似的東西:
@Repository
public interface OsobaRepo extends CrudRepository<Osoba, Integer> {
@Query(value = "SELECT imie FROM osoba WHERE osoba.id = :id", nativeQuery = true)
String findNameById(@Param("id") int id);
}
@RestController
@RequestMapping("/api/osoba")
public class OsobaAPI {
@Autowired
private OsobaRepo osobaRepo;
@PostMapping
@RequestMapping("/getID")
public Osoba findOsobaById(@RequestParam("id") int id){
String name = osobaRepo.findNameById(id);
Osoba osoba = new Osoba();
osoba.setImie(name);
return osoba;
}
}
@Entity
public class Osoba {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String imie;
private String nazwisko;
private int wiek;
private String miasto;
public Osoba() {
}
public Osoba(String imie, String nazwisko) {
this.imie = imie;
this.nazwisko = nazwisko;
}
public Osoba(int id, String imie, String nazwisko, int wiek, String miasto) {
this.id = id;
this.imie = imie;
this.nazwisko = nazwisko;
this.wiek = wiek;
this.miasto = miasto;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImie() {
return imie;
}
public void setImie(String imie) {
this.imie = imie;
}
public String getNazwisko() {
return nazwisko;
}
public void setNazwisko(String nazwisko) {
this.nazwisko = nazwisko;
}
public int getWiek() {
return wiek;
}
public void setWiek(int wiek) {
this.wiek = wiek;
}
public String getMiasto() {
return miasto;
}
public void setMiasto(String miasto) {
this.miasto = miasto;
}
}
POSTMAN 的原因是:
{
"id": 0,
"imie": "Szymon",
"nazwisko": null,
"wiek": 0,
"miasto": null
}
但希望從這個(gè)查詢(xún)中有理由,比如
{
"imie": "Szymon",
}
編輯:
關(guān)于這個(gè)話題還有一個(gè)問(wèn)題。如果我想獲得 JSON 格式的響應(yīng),例如:“imie,”nazwisko”?我不能使用:
@Query(value = "SELECT imie, nazwisko FROM osoba WHERE osoba.id = :id", nativeQuery = true)
String findNameById(@Param("id") int id);
}
如果作為字符串,則導(dǎo)致響應(yīng)。當(dāng)我這樣做時(shí),我得到:
{
"imie": null,
"nazwisko": "IMIE, NAZWISKO"
}
也許我應(yīng)該在這里使用 String[] 或創(chuàng)建僅具有這兩個(gè)屬性的新類(lèi)?
添加回答
舉報(bào)