尝试获取集合的所有数据,但不断收到“No Setter For Fields”

问题描述 投票:0回答:1

我在将数据从 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 数组

java json spring-boot google-cloud-firestore
1个回答
0
投票

你已经标记了

spring-boot
,在使用boot时,spring默认使用
jackson
进行json序列化。
@SerializedName
Gson 注释。您需要使用
@JsonProperty
来代替,这相当于 Jackson

© www.soinside.com 2019 - 2024. All rights reserved.