我在将数据从 Firestore 映射到 Spring Boot 应用程序中的 Java 对象时遇到问题。具体来说,当从 Firestore 检索数据并将其映射到我的 Java 类时,除了“Bioma”和“Grupo”之外,大多数字段都被设置为 null。其他字段(如“Categoria de Ameaça”、“Estados de Ocorrência”等)为空,即使 Firestore 数据具有这些字段的有效值。
这是我当前上传到 Firestore 数据库的 JSON 文件:
{
"Categoria de Ameaça": "Vulnerável (VU)",
"Espécie exclusiva do Brasil": "Sim",
"Estados de Ocorrência": "PR",
"Principais Ameaças": "Perda de Habitat/Degradação (Induzida por Humanos)",
"Sigla Categoria de Ameaça": "VU",
"Plano de Ação Nacional para Conservação (PAN)": "Sim",
"Família": "Salicaceae",
"Bioma": "Mata Atlântica",
"Nível de Proteção na Estratégia Nacional": "2",
"Espécie (Simplificado)": "Abatia angeliana",
"Nome Comum": "-",
"Ordenamento Pesqueiro ": "Não",
"Grupo": "Angiospermas",
"Fauna/Flora": "Flora",
"Presença em Áreas Protegidas": "Sim"
},
{
"Categoria de Ameaça": "Em Perigo (EN)",
"Espécie exclusiva do Brasil": "Não",
"Estados de Ocorrência": "BA; ES; MG; PR; RJ; RS; SC; SP",
"Principais Ameaças": "Agropecuária; Assentamento Humano:cidades; Extracao Direta:Caça/Pesca; Extracao Florestal",
"Sigla Categoria de Ameaça": "EN",
"Plano de Ação Nacional para Conservação (PAN)": "Não",
"Família": "Cracidae",
"Bioma": "Cerrado; Mata Atlântica",
"Nível de Proteção na Estratégia Nacional": "4",
"Espécie (Simplificado)": "Aburria jacutinga",
"Nome Comum": "Jacutinga",
"Ordenamento Pesqueiro ": "Não",
"Grupo": "Aves",
"Fauna/Flora": "Fauna",
"Presença em Áreas Protegidas": "Sim"
},
{
"Categoria de Ameaça": "Criticamente em Perigo (CR)",
"Espécie exclusiva do Brasil": "Sim",
"Estados de Ocorrência": "RJ",
"Principais Ameaças": "Assentamentos Humanos: Cidades",
"Sigla Categoria de Ameaça": "CR",
"Plano de Ação Nacional para Conservação (PAN)": "Sim",
"Família": "Malvaceae",
"Bioma": "Mata Atlântica",
"Nível de Proteção na Estratégia Nacional": "2",
"Espécie (Simplificado)": "Abutilon anodoides",
"Nome Comum": "-",
"Ordenamento Pesqueiro ": "Não",
"Grupo": "Angiospermas",
"Fauna/Flora": "Flora",
"Presença em Áreas Protegidas": "Sim"
}
这就是我的 Species 类在 Spring 上建模的方式,我已经仔细检查了每个字段以确保它们匹配:
package com.example.Rest.FireBase.Model;
import com.google.gson.annotations.SerializedName;
import lombok.*;
import org.springframework.context.annotation.Bean;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Species {
@SerializedName("Categoria de Ameaça")
private String CategoriaDeAmeaca;
@SerializedName("\n" +
"Espécie (Simplificado)")
private String EspecieExclusivaDoBrasil;
@SerializedName("Estados de Ocorrência")
private String EstadosDeOcorrencia;
@SerializedName("Principais Ameaças")
private String PrincipaisAmeacas;
@SerializedName("Sigla Categoria de Ameaça")
private String SiglaCategoriaDeAmeaca;
@SerializedName("Plano de Ação Nacional para Conservação (PAN)")
private String PlanoDeAcaoNacionalParaConservacao;
@SerializedName("Família")
private String Familia;
@SerializedName("Bioma")
private String Bioma;
@SerializedName("Nível de Proteção na Estratégia Nacional")
private String NivelDeProtecaoNaEstrategiaNacional;
@SerializedName("Espécie (Simplificado)")
private String EspecieSimplificado;
@SerializedName("Nome Comum")
private String NomeComum;
@SerializedName("Ordenamento Pesqueiro ")
private String OrdenamentoPesqueiro;
@SerializedName("Grupo")
private String Grupo;
@SerializedName("Fauna/Flora")
private String FaunaFlora;
@SerializedName("Presença em Áreas Protegidas")
private String PresencaEmAreasProtegidas;
}
这是我检索馆藏中所有物种的服务
public List<Species> getAllSpecies () throws ExecutionException,InterruptedException {
Firestore firestore = FirestoreClient.getFirestore();
CollectionReference collection = firestore.collection("bichos");
ApiFuture<QuerySnapshot> querySnapshot = collection.get();
List<Species> speciesList = new ArrayList<>();
for (DocumentSnapshot document : querySnapshot.get().getDocuments()) {
Species species = document.toObject(Species.class);
speciesList.add(species);
}
return speciesList;
}
我的服务控制器:
@GetMapping("/all")
public List<Species> getAllSpecies() {
try {
return speciesService.getAllSpecies();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
return null;
}
}
最后我得到的输出:
[Rest-FireBase] [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper : No setter/field for Família found on class com.example.Rest.FireBase.Model.Species
2024-05-15T00:10:49.030-03:00 WARN 32736 --- [Rest-FireBase] [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper : No setter/field for Bioma found on class com.example.Rest.FireBase.Model.Species (fields/setters are case sensitive!)
2024-05-15T00:10:49.030-03:00 WARN 32736 --- [Rest-FireBase] [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper : No setter/field for Nível de Proteção na Estratégia Nacional found on class com.example.Rest.FireBase.Model.Species
2024-05-15T00:10:49.030-03:00 WARN 32736 --- [Rest-FireBase] [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper : No setter/field for Espécie (Simplificado) found on class com.example.Rest.FireBase.Model.Species
2024-05-15T00:10:49.030-03:00 WARN 32736 --- [Rest-FireBase] [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper : No setter/field for Nome Comum found on class com.example.Rest.FireBase.Model.Species
2024-05-15T00:10:49.030-03:00 WARN 32736 --- [Rest-FireBase] [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper : No setter/field for Ordenamento Pesqueiro found on class com.example.Rest.FireBase.Model.Species
我尝试使用 Gson 来更改名称、字段和 eving 进行转换,在 Firestore 中,所有文档都保存在集合中,但我的输出始终是带有空对象的 json 数组
你已经标记了
spring-boot
,在使用boot时,spring默认使用jackson
进行json序列化。 @SerializedName
是 Gson 注释。您需要使用 @JsonProperty
来代替,这相当于 Jackson。