我的请求体是GameTeamRequest,如下所示:
public class GameTeamRequest {
private Game game;
private HashMap<Team, Integer> teamsInnigsPostionMap;
}
游戏对象和团队对象如下:
public class Game{
private String tournamentName;
}
团队对象
public class Team{
private String teamName;
}
控制器具有以下代码:
@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没有地图而只有对象时,这是完美的。当请求中有地图时,我错过了什么?
更新:
请求网址为http://localhost:8080/iscorecard/game
接头:
Content-Type:application / json
答案 0 :(得分:1)
如果要将某些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
}
}