java - 415 当请求正文具有以自定义对象为键的 Map 时,出现不支持的对象异常

标签 java json spring rest spring-mvc

我的请求正文是 GameTeamRequest,如下所示:

public class GameTeamRequest {
    private Game game;  
    private HashMap<Team, Integer> teamsInnigsPostionMap;
}

游戏对象和团队对象如下:

public class Game{  
    private String tournamentName;
}

团队对象是

public class Team{
    private String teamName;
}

Controller 有以下代码:

@RequestMapping(value = "/game", method = RequestMethod.POST)
@ResponseBody
public void createGame(@RequestBody GameTeamRequest gameTeamReq) {
    tournamentService.createGame(gameTeamReq);
}

请求负载如下:

{
    "game": {
        "tournamentName":"Ashes"
     },
    "teamsInnigsPostionMap" : [
    {
        "teamName":"Australia",
        "inningsPosition": "1"
    },
    {
        "teamName":"England",
        "inningsPosition": "2"
    }
  ]
}

当我尝试执行时,出现以下异常:

415 Unsupported Media Type

当 GameTeamRequest 没有 map 而只有对象时,这非常有效。当请求中有 map 时我缺少什么?

更新:

请求 URL 为 http://localhost:8080/iscorecard/game

标题:

内容类型:application/json

最佳答案

如果您想将某些 JSON 反序列化为 Map,那么 JSON 应该类似于:

{
   "key": { "valueObjectProperty": "valueObjectValue" }
}

请注意,JSON 对象中的键必须是字符串,因此不可能反序列化任何对键为自定义对象的 Java 映射的请求。我的意思是,您可能可以编写一些自定义解串器,但这似乎需要付出太多努力。

最好更改 Java 类的格式以及您发送的请求。

例如(如果团队名称是唯一的):

public class GameTeamRequest {
    private Game game;  
    private HashMap<String, Integer> teamsInnigsPostionMap;
}

然后您可以发送并成功反序列化请求,例如:

{
  "game": {
     "tournamentName":"Ashes"
  },
  "teamsInnigsPostionMap" : {
    "Australia": 1,
    "England": 2
  }
}

关于java - 415 当请求正文具有以自定义对象为键的 Map 时,出现不支持的对象异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058233/

相关文章:

java - Tomcat 6 中未部署 Soap Web 服务

java - 动态合并背景

java - 获取 "Attribute "ref“必须为元素类型 "property"声明。”

javascript - jQuery JSON循环遍历嵌套对象

ios - 在 iOS Swift 中将 NSDistionary 转换为 Json 的问题

iphone - json 解析返回的数据顺序与 json 字符串不同

java - Spring Security oauth 并关闭某些 url 的安全性,但保持基本身份验证激活

java - 如何在 @Configuration/@Bean 使用的单元测试中禁用 Spring Autowiring

java - 新实例 Spring 作用域

java - Java 1.6 中清理资源的首选方法