Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript/javascript中的JSON.stringify与Java控制器中的JSON字符串param/request body不匹配_Java_Json_Angularjs_Typescript_Restapi - Fatal编程技术网

typescript/javascript中的JSON.stringify与Java控制器中的JSON字符串param/request body不匹配

typescript/javascript中的JSON.stringify与Java控制器中的JSON字符串param/request body不匹配,java,json,angularjs,typescript,restapi,Java,Json,Angularjs,Typescript,Restapi,我正在使用JDK1.8。我在java控制器中有一个rest端点: @PostMapping("/filters") public ResponseEntity<StatsDTO> listWithFilter( @RequestBody(required = false) String filter ) { try { ............... } } 现在,当我尝试与前端(typescript上的Angular 7)集成时,我必须两次

我正在使用JDK1.8。我在java控制器中有一个rest端点:

@PostMapping("/filters")
public ResponseEntity<StatsDTO> listWithFilter(
      @RequestBody(required = false) String filter
) {
try { 
   ...............
}
}
现在,当我尝试与前端(typescript上的Angular 7)集成时,我必须两次执行JSON.stringify(将JSON对象或过滤器作为requestbody提交),以使其与后端协同工作。我将得到null,否则将作为java控制器端“过滤器”(在请求正文中)的值

因此,使用doubleJSON.stringify,我们前端提交的结果是(当它工作时)

"{\"billType\":{\"INTAKE\":true}}"
{"billType":{"INTAKE":true}}
因此,对于singleJSON.stringify,从我们的from-end提交的结果是(当它不工作时)

"{\"billType\":{\"INTAKE\":true}}"
{"billType":{"INTAKE":true}}
问题:在java控制器中,requestBody“filter”的数据类型应该是什么,才能与单个JSON.stringify一起工作?

我尝试了json.org.JsonObject作为“过滤器”的数据类型,但没有任何区别

提前谢谢

前端代码片段:

const fullUrl = `${this.referralsUrl}/filters?first=${first}&max=${max}`;
const headerDict = {
  "Content-Type": "application/json; charset=utf-8",
  Accept: "application/json",
  "Access-Control-Allow-Headers": "Content-Type"
};
const headers = new HttpHeaders(headerDict);

 if (filters) {

  const requestBody = JSON.stringify(filters);
  return this.http
    .post<Page<ClinAssistReferral>>(fullUrl, JSON.stringify(requestBody), { headers })
    .pipe(
      map((data: any) => {
      ...........
      }
}
constfullurl=`${this.referralsUrl}/filters?first=${first}&max=${max}`;
const headerDict={
“内容类型”:“应用程序/json;字符集=utf-8”,
接受:“应用程序/json”,
“访问控制允许标头”:“内容类型”
};
const headers=新的HttpHeaders(headerDict);
如果(过滤器){
const requestBody=JSON.stringify(过滤器);
返回此文件。http
.post(fullUrl,JSON.stringify(requestBody),{headers})
.烟斗(
地图(数据:任意)=>{
...........
}
}

如果主体不是动态的,则最好为请求制作DTO

如果body是动态的,我建议您尝试jackson提供的
JsonNode
。看看这个库是否可以

import com.fasterxml.jackson.databind.JsonNode;
...
@后映射(“/filters”)
带过滤器的公共响应列表(
@RequestBody(required=false)JsonNode筛选器
) {
试试{
var ADTANCE=filter.get(“billType”).get(“ADTANCE”).asBoolean()
...............
}
}