@[TOC](HttpClient调用JSONObject.parseObject(EntityUtils.toString(response.getEntity()))报com.alibaba.fastjson.JSONException: syntax error, pos 1, line 1, column异常解决方案)
问题背景
在使用httpClient调用url的时候,返回值我进行了json解析,导致fastjson报错
2022-04-03 21:34:42.112 ERROR 24784 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.fastjson.JSONException: syntax error, pos 1, line 1, column 2success] with root cause
com.alibaba.fastjson.JSONException: syntax error, pos 1, line 1, column 2success
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1480) ~[fastjson-1.2.62.jar:na]
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1366) ~[fastjson-1.2.62.jar:na]
at com.alibaba.fastjson.JSON.parseObject(JSON.java:241) ~[fastjson-1.2.62.jar:na]
at com.yg.thirdtest.utils.HttpClientPool.postForJsonObject(HttpClientPool.java:279) ~[classes/:na]
at com.yg.thirdtest.controller.CallbackThirdController.callbackThird(CallbackThirdController.java:38) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.18.jar:5.3.18]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.18.jar:5.3.18]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.18.jar:5.3.18]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.18.jar:5.3.18]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.18.jar:5.3.18]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.18.jar:5.3.18]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.60.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.18.jar:5.3.18]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.18.jar:5.3.18]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.18.jar:5.3.18]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.18.jar:5.3.18]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.18.jar:5.3.18]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.18.jar:5.3.18]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.60.jar:9.0.60]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.60.jar:9.0.60]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221]
我在代码中使用了JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity()))去解析返回值EntityUtils.toString(response.getEntity())
但是我代码中的返回值是一个:return “success”;字符串格式,并不是一个json串,所以使用JSONObject.parseObject导致报错了
解决方案
1 去掉JSONObject.parseObject解析字符串,直接使用返回的字符串作为结果
2 url的返回值使用JSON字符串的格式,return ResultVO.success(“success”),封装一个返回类,自动解析为json字符串
package com.yg.thirdtest.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
/**
* @author : suolong
* date : 2022/2/12 14:34
*/
@Builder
@Data
@NoArgsConstructor
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResultVO<T> implements Serializable {
private static final long serialVersionUID = 7437203838526425744L;
private T data;
/**
* 错误码
*/
private String code;
/**
* 错误信息
*/
private String msg;
/**
* @Caption
* @Param
* @Return
*/
private String globalId;
public ResultVO(T data, String code, String msg, String globalId) {
this.data = data;
this.code = code;
this.msg = msg;
this.globalId = globalId;
}
public static <T> ResultVO<T> success(T data) {
return new ResultVO<T>(data, ResponseCode.SUCESS, "ok", null);
}
public static <T> ResultVO<T> success(T data, String globalId) {
return new ResultVO<T>(data, ResponseCode.SUCESS, "ok", globalId);
}
public static <T> ResultVO<T> error(String message, String code) {
return new ResultVO<>(null, code, message, null);
}
public static <T> ResultVO<T> error(String message, String code,String globalId) {
return new ResultVO<>(null, code, message, globalId);
}
/**
* 获取
*
* @return data
*/
public T getData() {
return this.data;
}
/**
* 设置
*
* @param data
*/
public void setData(T data) {
this.data = data;
}
/**
* 获取 错误码
*
* @return code 错误码
*/
public String getCode() {
return this.code;
}
/**
* 设置 错误码
*
* @param code 错误码
*/
public void setCode(String code) {
this.code = code;
}
/**
* 获取 错误信息
*
* @return msg 错误信息
*/
public String getMsg() {
return this.msg;
}
/**
* 设置 错误信息
*
* @param msg 错误信息
*/
public void setMsg(String msg) {
this.msg = msg;
}
}
package com.yg.thirdtest.dto;
public class ResponseCode {
/**
* 表明该请求被成功地完成,所请求的资源发送到客户端。
*/
public static final String SUCESS = "200";
/**
* 系统执行错误
*/
public static final String FAIL = "500";
/**
* 系统执行错误
*/
public static final String NEEDLOGIN = "401";
}
总结
- 用什么接收就用什么返回格式
作为程序员第 95 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …
Lyric: 对着我说再见
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/110780.html