HttpClient调用JSONObject.parseObject(EntityUtils.toString(response.getEntity()))报JSONException异常解决方案

导读:本篇文章讲解 HttpClient调用JSONObject.parseObject(EntityUtils.toString(response.getEntity()))报JSONException异常解决方案,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

@[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 …
HttpClient调用JSONObject.parseObject(EntityUtils.toString(response.getEntity()))报JSONException异常解决方案HttpClient调用JSONObject.parseObject(EntityUtils.toString(response.getEntity()))报JSONException异常解决方案HttpClient调用JSONObject.parseObject(EntityUtils.toString(response.getEntity()))报JSONException异常解决方案

Lyric: 对着我说再见

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/110780.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!