feign.codec.DecodeException: no se pudo extraer la respuesta: no se encontró un HttpMessageConverter adecuado

Código de error:

  UserBaseDto lmsInfo = userBaseClient.getUserById(pointMqVo.getUserId(), pointMqVo.getPlatformId());

Código llamado:

    @ApiOperation(httpMethod = "GET", value = "根据用户Id查询用户信息")
    @ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户id", dataType = "String",required = true, paramType = "query"),
            @ApiImplicitParam(name = "platformId", value = "平台id", dataType = "String", paramType = "query"),
    })
    @RequestMapping("/getUserById")
    public UserBaseDto getUserById(@RequestParam String userId,@RequestParam(required = false) String platformId) {
        UserBaseInfo data = userBaseService.findById(userId, platformId);
        return UserBaseInfo.infoToDto(data);
    }

Mensaje de error:

feign.codec.DecodeException: Could not extract response:
 no suitable HttpMessageConverter found for response type [class 
com.chinahrt.gp6.system.sharevo.UserBaseDto] 
and content type [text/html;charset=utf-8]

análisis del problema:

Al depurar con puntos de interrupción, siempre sospeché que no se toma el punto de interrupción en el método llamado. Siempre sospecho que la llamada remota no funciona.

Al observar el mensaje de error, Baidu pensó que la llamada de fingir no admitía el tipo de devolución de UserBaseDto , por lo que utilizó un método que devolvió un tipo de cadena para probar la llamada e informó un error de SQL en ese momento. De repente se dio cuenta de que en realidad usó la consulta del método llamado, y el sql de la consulta era incorrecto, y el error anterior causado por el mensaje de error no se pudo devolver. No es que UserBaseDto no se pueda devolver. 

Y el problema simple de los informes de errores de SQL, por qué no lo encontré es por escribir casos de prueba, generalmente mire aquí, aquí aparece feign.codec.DecodeException: ..., y la ejecución anterior indica un error de ejecución de SQL.

El mensaje de error de sql es el siguiente:

{"code":"UNKNOWN_EXCEPTION","message":"\r\n### Error querying database.  
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 
'platform_id' in 'where clause'\r\n### The error may exist in file
 [E:\\liziyi\\xxx\\xxx-system\\target\\classes\\mapper\\UserBaseDao.xml]\r\n### 
The error may involve defaultParameterMap\r\n### The error occurred while setting 
parameters\r\n### SQL: select 
id,name,password,parent_id,idcard,picture,real_name,sex,birthday,mobile,email,
create_time,seal_flag,if_open,weixin_opernid,if_vip,nick_name,thirdparty_id,
thirdparty,user_level,nation,last_login_time,last_login_source,if_test,if_provider,
account_money,last_modify_time,last_pwd_modify_time,if_student,if_manager,
department,position,polevel_id,base_id,political_id,degree_id,prof_id,office_phone,
if_enable_update,if_check,jobtitle_id,obtitle_date,units_natureid,units_fieldid,
office_address,administration_position,domiciliary_register,college,specialty,
degree_no,birth_place,applicants_rating,address,political_title,if_transform,
transform_time,units_industry,bind_id,bind_name,bind_role,bind_plan,info_from,
interest,personal_summary,professional_technical,professional_title,level_name,
work_area,function_level,identity_id,administrative_range,qq,office_nature,my_point,
my_get_point,my_exchange_point,certificate_title_series,certificate_right_name,
certificate_profession_name,bind_user_id,manage_unit,general1,general2,general3,
general4,general5,train_no,train_address,home_address,domiciliary_type,train_type,
train_work_area,train_level,ssn,professional_value from user_base where id=?     
      AND platform_id = ?\r\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column
 'platform_id' in 'where clause'\n; bad SQL grammar []; nested exception is 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column
 'platform_id' in 'where clause'|请求地
址:http://xxx/xxx/system/serviceApi/user/getUserById,参
数:userId=111111&platformId=1,traceId="}

Solución:

Ahora se localiza por el problema de SQL, no por las diferentes llamadas entre servicios, ni por la imposibilidad de pasar el parámetro UserBaseDto, sino por el error de SQL. Puede modificar el lugar donde se informa el error de SQL. El mensaje de error de SQL anterior significa que hay un problema con el elemento platform_id, porque no hay tal elemento en mi tabla, pasé este parámetro, por lo que se informa un error.

Espero que todos identifiquen su problema.

Supongo que te gusta

Origin blog.csdn.net/Ciel_Y/article/details/122586551
Recomendado
Clasificación