Я создаю конечную точку отдыха, у которой RequestBody будет объектом JSON:
@POST
@Path("/")
@Consumes("application/json")
@Produces(MediaType.APPLICATION_JSON)
@ValidateRequest
@ApiOperation(value = "updateDetails", nickname = "updateDetails")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Success", response = responseVO.class),
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 403, message = "Forbidden"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Failure")})
public @Valid
PortalResponseVO updateDetails( @RequestBody Object JSONObj){
...
}
Мой запрос JSON будет выглядеть примерно так:
{
name: "name1",
description: "updating details by env",
"env" : {
"env1" : {
"envName" : "envName1",
"changeDesc" : "description1"
},
"env2" : {
"envName" : "envName2",
"changeDesc" : "description2"
}
}
}
Я хочу отобразить объект JSONк объекту Java Map, чтобы я мог использовать детали, не создавая объектный класс для него.Однако, поскольку некоторые поля являются строками, а некоторые - вложенными картами, я немного не уверен в том, как анализировать объект.Я пытался использовать HashMap<String, Object> result = new ObjectMapper().readValue(JSONObj, HashMap.class);
, но каждый раз, когда я пытаюсь получить доступ к полю типа String name = JSONObj.get("name")
, я получаю сообщение об ошибке incompatible types: java.util.Map cannot be converted to java.lang.String
EDIT
С тех пор я изменил свой кодto:
public @Valid
PortalResponseVO updateDetails( @RequestBody Map<String, Object>t JSONObj){
String name = (String) JSONObj.get("name");
String desc = (String) JSONObj.get("description");
Map<String, Object> env = (Map<String, Object>) JSONObj.get("env");
Map<String, String> env1 = (Map<String, String>) env.get("env1");
Map<String, String> env2 = (Map<String, String>) env.get("env2");
}
Я скомпилировал его, и он, кажется, компилируется просто отлично, но мне интересно, сработает ли это?Структура данных является статической, помимо имен и описаний, так что можно ли принудительно кастировать объекты таким образом?