Spring boot @RequestBody of a Map<String,String>[] 结果是一个空项目列表

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

客户端是一个有角度的网络应用程序。我尝试向 Spring Boot REST API 发送 Map 列表,但它似乎被序列化为空项目列表。 我还尝试使用数组 Map[] 和使用对象映射。

这是 POJO 定义:

public class ClasseurDTO {

    private Map<String,String>[] ongletGeneralite;
    
    public ClasseurDTO() {
    }

    public Map<String, String>[] getOngletGeneralite() {
        return ongletGeneralite;
    }

    public void setOngletGeneralite(Map<String, String>[] ongletGeneralite) {
        this.ongletGeneralite = ongletGeneralite;
    }
    
    @Override
    public String toString() {
        // parse ongletGeneralite object 
        String str = "";
        for (Map<String, String> map : ongletGeneralite) {
            for (Map.Entry<String, String> entry : map.entrySet()) {
                str += entry.getKey() + " : " + entry.getValue() + " ,";
            }
        }

        return "ClasseurDTO [ongletGeneralite=" + str + "]";
    }
}

这是打字稿类型def

export type ClasseurDTO = {
     ongletGeneralite : Map<string, string>[]
}

API的方法定义:

@PostMapping("/public/observations/import-observations")
public ResponseEntity<String> importObservations(@RequestBody ClasseurDTO classeur) {
    observationService.importObservations(classeur);
    return ResponseEntity.ok().body("Importation terminée");
}

这是http调用

  importClasseur(classeur: ClasseurDTO): Observable<HttpResponse<{}>> {
    console.log("importClasseur" , classeur)
    return this.http
    .post(`${this.resourceUrlPublic}/import-observations`, classeur, { observe: 'response' });
  }

这是调用API之前客户端的日志

这是网络调试工具中的有效负载

有人可以指出问题出在哪里吗?

angular typescript spring-boot
1个回答
0
投票

我继续调查并尝试了几件事。 我只是将输入类型更改为 string[][][] 而不是 Map 列表,让所有剩余的源代码保持不变,并注意到嵌套项不为空。 所以我最终扩展了定义并在客户端使用它:

export class CellDataClasseur {
    cellData : string[] = []
}

export class LigneDataClasseur {
    ligneData : CellDataClasseur [] = [];
}
export class ClasseurDTO  {
     ongletGeneralite: LigneDataClasseur[] = [];

}

还有这个 POJO 服务器端:

public class CellDataClasseur {

    private List<String> cellData;

    public List<String> getCellData() {
        return cellData;
    }

    public void setCellData(List<String> cellData) {
        this.cellData = cellData;
    }
}

我提出这个问题,以防有人可以解释如何序列化 Map(如果可能的话),或者如何改进我的解决方案

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