Java SyntaxError:Json.parse:数据GWT意外结束
当我使用GWT向API发出rest请求时,我在客户端得到了“Json.parse:意外的数据结尾” 客户端代码:Java SyntaxError:Json.parse:数据GWT意外结束,java,json,gwt,spring-boot,gwt-2.5,Java,Json,Gwt,Spring Boot,Gwt 2.5,当我使用GWT向API发出rest请求时,我在客户端得到了“Json.parse:意外的数据结尾” 客户端代码: private void executeUnAccountedTransactionByService(String requestJson) { String requestData = "request=" + URL.encodeQueryString(requestJson); RequestBuilder builder = new
private void executeUnAccountedTransactionByService(String requestJson)
{
String requestData = "request=" + URL.encodeQueryString(requestJson);
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode(postPaymentUrl));
builder.setHeader("Content-Type","application/x-www-form-urlencoded");
builder.setHeader("Accept","application/json") ;
try {
builder.sendRequest(requestData, new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
JSONValue jsonValue = JSONParser.parseStrict(response.getText());
JSONObject responseObject = jsonValue.isObject();
//my logic
}
@Override
public void onError(Request request, Throwable exception) {
}
});
}
catch (RequestException e) {
}
}
我的API代码:
@RequestMapping(value = "/url",
method = RequestMethod.POST)
public @ResponseBody ResponseEntity<?> processPayment(
@RequestParam("request") String payRequestJson,
HttpServletRequest servletRequest) {
PutUnAccountedTransaction unAccountedTransaction = null ;
try {
LOGGER.info("request recieved unaccounted transaction : " +
payRequestJson);
unAccountedTransaction = objectMapper.readValue(payRequestJson, PutUnAccountedTransaction.class) ;
} catch (Exception e) {
//currenlty handling success case only.
return ResponseEntity.ok(unAccountedTransaction);
}
return ResponseEntity.ok(unAccountedTransaction);
}
请求:{“applicationIdentifierIC”:“jh2b32vy”,“amount”:“100”,“authCode”:“HHBJH”,“orderNumber”:“jhsbhjb”,“dateTimeInUTC”:“03/01/2017 07:20:57”,“gatewayName”:“gatewayName”,“transactionReference”:“asdhgwvg”,“DealId”:“bhjhahdbj”,“cardType”:“VISA”,“TermalID”:“JHBJJJ”,“userReference”:“bjhbjh”,“paymentType”:“EMV\U芯片”,“expMonth”:”:“09”、“expYear”:“19”、“卡号”:“1111”}
我得到了预期的回应
我认为问题是由于“接受”标题。我尝试了“/”、“应用程序/x-www-form-urlencoded”,但我得到了相同的错误
我在《邮递员》中得到的回复是:
{
"gatewayName": "credit-call",
"dealerId": 1278,
"terminalId": "jjhbjhbhjbj",
"amount": 100,
"orderNumber": "jhsbhjb",
"cardNumber": "9111",
"cardType": "Disc",
"dateTimeInUTC": "03/01/2017 07:20:57",
"paymentType": "EMV_CHIP",
"authCode": "hhbjhbjh",
"transactionReference": "asdhgwvg",
"userReference": "bjhbjh",
"applicationIdentiferICC": "jh2b32vy",
"expMonth": 9,
"expYear": 12,
"dateTimeInPST": null,
"inoiceGuid": null,
"description": null
}
在浏览器中检查客户端后收到的响应标头
Server: Apache-Coyote/1.1
X-Application-Context: postpayment:devvm
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 01 Mar 2017 15:28:17 GMT
我使用的是GWT2.5版本
我遇到以下错误:
java.lang.IllegalArgumentException: empty argument
at com.google.gwt.json.client.JSONParser.parse(JSONParser.java:210)
at com.google.gwt.json.client.JSONParser.parseStrict(JSONParser.java:87)
排队
JSONValue jsonValue = JSONParser.parseStrict(response.getText())
检查您的响应JSON并确认其有效性。错误表明请求正常,但当响应JSON字符串到达浏览器时,
JSONParser.parseStrict(response.getText())
无法解析它,因为它不是合法的JSON
如果您需要更多帮助,请在此处共享响应JSON和响应标题。看起来很好…您可以添加准确的错误消息吗?看起来不太正确,但具有堆栈跟踪和准确的错误可能会有所帮助。添加了我正在获取的错误和获取该错误的行。错误消息表示没有JSON存在-您非常确定
response.getText()
是您在上面发布的JSON吗?因为parseStrict不会用非空字符串引发该异常…response.getText()是空的。我发布的响应是我在邮递员中得到的。我在得到response.getText()空的。但是我不理解curl和postman的相同请求。好吧,那就是你的问题的根源。你的问题需要更多的细节才能回答这个问题,但至少从浏览器的控制台和调试器中的网络选项卡开始,看看打电话时是否有错误,以及标题是什么发送以查看您是否做错了。但是,是的,空字符串不是有效的json。
JSONValue jsonValue = JSONParser.parseStrict(response.getText())