【问题标题】:Parsing Map and String from JSON doesn't work从 JSON 解析 Map 和 String 不起作用
【发布时间】:2017-06-04 22:32:54
【问题描述】:

我正在尝试使用 spring 框架设置我的第一个 REST web 服务。在打扰前端之前,我想先在 Controller 中设置 Requestmapping,我正在尝试使用 Postman 进行测试。

我正在使用邮递员,设置为 POST、原始、应用程序/JSON,然后是以下内容:

{"attendanceList" : { 
    "Jane Doe": "PRESENT", 
    "John MacDonald": "PRESENT", 
    "Fred Flinstone": "ABSENT"},
"date":"2017-06-01"}

在我的控制器中,我有以下内容:

@RequestMapping(value = "/post", method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_VALUE })
@ResponseBody
public void setAttendence(@RequestBody Map<String, Attendence> attendenceList, String date) {
    //Implementation code
}

但是,当我将上述发布请求发送到服务器时,我得到一个大小为 4 的地图:

"attendanceList" -> ABSENT (the default value)
"Jane Doe" ->  PRESENT
"John MacDonald" -> PRESENT
"Fred Flinstone" -> ABSENT

我的字符串日期 = null

为什么这不符合我的预期?我做错了什么?

【问题讨论】:

    标签: java json spring dictionary


    【解决方案1】:

    您告诉 Spring 请求正文,即整个 JSON,应该被解析为 Map&lt;String, Attendence&gt;。 JSON 显然不是这样的映射。

    它应该被映射到一个类,例如

    public class Input {
        Map<String, Attendence> attendanceList;
        LocalDate date;
    
        // ...
    }
    

    当然,应该删除 Spring 忽略的 String date 参数。

    【讨论】:

    • 呃...我是多么愚蠢。谢谢,现在就像一个魅力。虽然直接从“2017-06-01”到 LocalDate 对象似乎不起作用。我现在有一个带有字符串日期变量的 Input 类,并且现在在 getDate() 方法中将其解析为带有 DateTimeFormatter 的 LocalDate。效果很好。
    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 2022-09-23
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多