Feign 调用出现的net.sf.json.exception:Unquotted String错误,解决办法。

本文介绍了一个使用HashMap传递数据时遇到的问题:HashMap的toString方法导致JSON转换错误。文章详细解释了问题的原因,并提供了解决方案——使用JSONObject替代HashMap。

错误原因:

/**
*请求
*/
@ResponseBody
    @RequestMapping(value = "/queryMobileChainClinicCount.do", method = RequestMethod.POST)
    public Object queryMobileChainClinicCount(String clinicID, String openID) {
        logger.begin();
        logger.debug("queryMobileChainClinicCount Parameters", clinicID);
        ResultMessage message = new ResultMessage();
        try {
            Map<String, String> parameterMap = new HashMap<String, String>();
            parameterMap.put("clinicID", clinicID);
            parameterMap.put("openID", openID);
            Integer count = mobileLoginService.queryMobileChainClinicCount(parameterMap);//feign 服务接口
            message.setCode(CodeConstant.SUCCESS);
            message.setData(count);
            logger.debug("message", message);
        } catch (BusinessException e) {
            message.setCode(e.getErrorCode());
            message.setCodeDesc(e.getErrorDes());
            logger.error(e);
        } catch (Exception e) {
            message.setCode(CodeConstant.SYSTEM_ERROR);
            message.setCodeDesc(ResourceUtils.getResultCodeDesc(CodeConstant.SYSTEM_ERROR));
            logger.error(e);
        }
        logger.end();
        return message;
    }

原因是使用hashMap,在传输过程中hashMap的toString方法不会添加引号,于是在接收参数做json转换出现了如上问题,解决方法将HashMap替换成JSONObject

HashMap toString

public String toString() {
        Iterator<Entry<K,V>> i = entrySet().iterator();
        if (! i.hasNext())
            return "{}";

        StringBuilder sb = new StringBuilder();
        sb.append('{');
        for (;;) {
            Entry<K,V> e = i.next();
            K key = e.getKey();
            V value = e.getValue();
            sb.append(key   == this ? "(this Map)" : key);
            sb.append('=');
            sb.append(value == this ? "(this Map)" : value);
            if (! i.hasNext())
                return sb.append('}').toString();
            sb.append(',').append(' ');
        }
    }
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。 ; uncategorized SQLException; SQL state [S0002]; error code [9002]; 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34)
05-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值