我的前端正在发布一个json
对象:
[{"FUND_CODE":"testFUND","PORTF_CODE":"testcode","CLIENT_STAT":null,"CLIENT_LOCAL_CURR":null,"CLIENT_START_DT":"2017-04-06","CLIENT_END_DT":"9998-12-31","CREATED_USER_ID":"testuser","CREATED_DATETIME":"2017-05-04","LAST_UPDATE_USER":null,"LAST_UPDATE_DT":null}]
控制器使用以下内容在json
上方发布:
deleteTableData = (schema: string, tableName: string, records: string[]): Observable<number> => {
if (records.length > 0){
const headers = new HttpHeaders({
'Content-Type': 'application/json'
});
try {
return this._http.post<number>(this.moduleUrl + '/delete?schemaName=' + schema + "&tableName=" + tableName, records, { headers: headers });
} catch (err) {
console.log(err);
}
}
}
我的后端是这样收到的:
@CrossOrigin
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public ResponseEntity<RestWrapper> delete(@RequestParam String schemaName, @RequestParam String tableName, @RequestBody Json body){
StringBuilder resStr = new StringBuilder();
log.info("POST REQUEST RECEIVED ==> " + schemaName + " && " + tableName + " && " + body.value());
return new ResponseEntity<>(new RestWrapper(resStr.toString()), HttpStatus.OK);
}
我得到了错误:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of springfox.documentation.spring.web.json.Json out of START_ARRAY token
如何解决此错误?
修改
忘了提一个重要的要求:我无法在服务器上创建特定的数据模型。有多个表要更新,表的列表将逐渐增加。因此,我需要一个通用API来执行操作。
答案 0 :(得分:0)
这是因为您正在使用错误的类读取对象。在RequestBody
中,进入的json与springfox.documentation.spring.web.json.Json
不兼容。
如果您尝试按名称Json
使用某些特定类,请检查您是否导入了正确的包。
或者,您可以为json主体创建简单的DTO。
class JsonRequest {
@JsonProperty("FUND_CODE")
private String fundCode;
@JsonProperty("CLIENT_STAT")
private String clientStat;
.
.
.
@JsonProperty("LAST_UPDATE_DT")
private String lastUpdateDt;
.
.
// getters and setters if needed
}
然后更改为
public ResponseEntity<RestWrapper> delete(..., @RequestBody JsonRequest jsonRequest){
答案 1 :(得分:0)
当我将HTTP正文数据类型从Json
更改为JsonNode
Jackson JSON difference between JsonNode and ObjectNode
如果我错了,请纠正我,我的理解是因为我没有为传入的JSON定义明确的模型,所以我将不得不使用JsonNode这是一个抽象类。
如果有人了解更多信息,请告知我们。
答案 2 :(得分:0)
试试这个: -
public ResponseEntity<RestWrapper> delete(..., @RequestBody JsonRequest[] jsonRequest)
然后使用适当的json属性(如
)创建pojo类 @JsonProperty("CREATED_DATETIME")
private String CREATED_DATETIME;
你将获得正确的对象数组,我已经使用它了。