【发布时间】:2020-11-01 11:49:27
【问题描述】:
我将以下 json 发送到休息端点:
{"test":
{
"regisration":{
"id":"22",
"birthdate":"1990-06-01T23:00:00.000Z"
},
"registrationarray":[
{
"id":"22",
"birthdate":"1990-06-01T23:00:00.000Z"
}
]
}
}
我在 Spring Boot 控制器中接收 json 为:
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody Map<String, Object> data) {
Map<String,Object> map = new HashMap<String,Object>();
ObjectMapper mapper2 = new ObjectMapper();
// mapper2.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
try {
map = mapper2.readValue(data.get("registration").toString(),
new TypeReference<HashMap<String,Object>>(){});
logger.info("");
当将toString() 应用到data.get("test") 时,我会松开字段名称周围的所有双引号,所以我得到:
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('r' (code 109)): was expecting double-quote to start field name
还有人知道为什么我所有的: 在我的 json 中的字段名之后都更改为=?
我的 java 后端项目中有一个类 Registration。我想解析从前端到注册对象的 json 字符串。我应该有mainperson 的注册对象和children 的注册对象数组
【问题讨论】:
-
因此,
toString的结果在键名周围没有引号,并使用=而不是:。显然,toString方法不会创建 JSON。你有什么理由期望它会这样吗? -
好吧,我以为它只会返回一个 jsonstring
-
从这个问题中你的期望是什么?
-
我的 java 后端项目中有一个类
Registration。我想解析从前端获得的 json 字符串到注册对象。然后我应该有mainperson的注册对象,children的注册对象数组 -
你到底为什么要在那里做你正在做的事情?只需投射地图值:
Map<String,Object> map = (Map) data.get("registration");
标签: java json spring-boot jackson