【发布时间】:2020-04-16 14:53:06
【问题描述】:
我是 Spring Framework 的新手,在从我的应用程序中检索本机查询结果时遇到了麻烦。该应用程序应该从我的 PostgreSQL 数据库中检索一些特定数据并将其公开为 REST 资源。但是,似乎无法将查询结果映射到我定义的实体对象中。该对象的定义方式与创建数据库的方式相同:我还在我的记录器应用程序上使用相同的实体进行插入操作。
我创建了一个 Entity 类:
package com.umeter.rest;
import ...
@Entity
@Table(name="dati_impianti")
public class DatiImpiantoEntity {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id_lettura;
@Column(name="sigla_impianto")
private String sigla_impianto;
@Column(name="timestamp")
private Date timestamp;
@Column(name="lettura")
private Float lettura;
@Column(name="stato")
private Integer stato;
public Integer getId_lettura() {
return id_lettura;
}
public void setId_lettura(Integer id_lettura) {
this.id_lettura = id_lettura;
}
public String getSigla_impianto() {
return sigla_impianto;
}
//other Getters and Setters
一个 Repository 类(带有一个随机的 nativequery 只是为了尝试一下)。
编辑:是的,需要使用本机查询,因为我将使用来自 postgresql 的一些本机功能,这些功能无法通过可用的普通 CRUD 方法获得。但是,这似乎不是问题,因为我尝试使用“findAll()”方法只是为了获得完全相同的 [null] 输出
package com.umeter.rest;
import ...
@Repository
public interface DatiRepository extends CrudRepository<DatiImpiantoEntity, Integer> {
@Query(nativeQuery = true, value = "SELECT * from dati_impianti LIMIT 10")
public List<DatiImpiantoEntity> getIstantanea();
}
还有一个REST 控制器:
package com.umeter.rest;
import ...
@RestController
@RequestMapping(path="/api")
public class DatiRestController {
@Autowired
private DatiRepository datiRepository;
@GetMapping(path="/istantanea")
public @ResponseBody List<DatiImpiantoEntity> getIstantanea() {
return datiRepository.getIstantanea();
}
}
但是,我得到的结果是一个空值列表(我想 Spring 无法将查询结果映射到我的 Entity 对象中):
[null,null,null,null,null,null,null,null,null,null]
当我使用通用“对象”返回类型(不包括数据库连接或查询问题)设置方法时,我得到了一个输出。但是,我得到的不是正确的 Json 输出格式,我知道现在应该是这样的:
[["MF1","2019-10-11T10:24:23.917+0000",3.814,6,null],["MF1","2019-10-11T10:24:33.867+0000",3.814,6,null],["MF1","2019-10-11T10:24:43.920+0000",3.814,6,null],["MF1","2019-10-11T10:24:53.884+0000",3.814,6,null],["MF1","2019-10-11T10:25:03.864+0000",3.814,6,null],["MF1","2019-10-11T10:25:13.869+0000",3.814,6,null],["MF1","2019-10-11T10:25:23.872+0000",3.814,6,null],["MF1","2019-11-08T13:17:35.175+0000",5511.1,0,null],["MF2","2019-11-08T13:17:35.174+0000",6567.025,0,null],["MF1","2019-11-08T13:25:25.655+0000",5548.027,0,null]]
【问题讨论】:
-
您是否配置了 JSON 对象映射器?喜欢here?
-
@HariharDas 我没有彻底尝试过(并且它不包含在我当前的资源中),但考虑到它在没有 Spring 文档示例的情况下工作,这似乎不是问题。我可以再试一次,但是当我这样做时,我只得到了相同的“空”输出,但用 {} 括号代替
-
能否请您重写
DatiImpiantoEntity的toString方法?例如从覆盖的toString方法中返回timestamp字段。 -
我在之前的测试中这样做过,但没有结果。如果我错了也请纠正我,但我想我们想要的不是“类”的字符串表示,而是更像是到对象的映射(其中 json 输出将由来自所有字段的 toString 方法而不是从类本身)
-
抱歉,我想看看是不是登录控制台有问题。但似乎您将控制器方法的输出添加到问题中。这确实是一个空值列表。
标签: java spring rest spring-mvc spring-data-jpa