Springframework无法读取http帖子

时间:2018-05-08 08:33:15

标签: java json spring angular

我的前端正在发布一个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来执行操作。

3 个答案:

答案 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;

你将获得正确的对象数组,我已经使用它了。