我的请求正文是 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/