RestTemplate(401,获取错误信息的处理方案)

这篇文章主要介绍了RestTemplate401获取错误信息的处理方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

RestTemplate,401,获取错误信息的处理方案,久久派带你了解更多相关信息。

目录
  • RestTemplate 401错误
    • 异常处理
    • 判断是否异常
  • RestTemplate通过对象传参,response的body为空讨论
    • 代码复现
    • 解决办法一:实体类转成普通类
    • 解决办法二:添加注解

RestTemplate 401错误

调用第三方api 若是服务返回状态码不为200,默认会执行DefaultResponseErrorHandler

异常处理

@Override public void handleError(ClientHttpResponse response) throws IOException {  HttpStatus statusCode = getHttpStatusCode(response);  switch (statusCode.series()) {   case CLIENT_ERROR:    throw new HttpClientErrorException(statusCode, response.getStatusText(),      response.getHeaders(), getResponseBody(response), getCharset(response));   case SERVER_ERROR:    throw new HttpServerErrorException(statusCode, response.getStatusText(),      response.getHeaders(), getResponseBody(response), getCharset(response));   default:    throw new RestClientException(\"Unknown status code [\" + statusCode + \"]\");  } }

判断是否异常

 protected boolean hasError(HttpStatus statusCode) {  return (statusCode.series() == HttpStatus.Series.CLIENT_ERROR ||    statusCode.series() == HttpStatus.Series.SERVER_ERROR); }

通常会直接已异常形势抛出,若不特殊处理无法获取返回提示信息。

需要捕捉HttpClientErrorException 异常,则可获取返回信息

try{      ......    }catch (HttpClientErrorException e) {                String resBody = e.getResponseBodyAsString();                log.info(\"客户端异常返回:{}\", resBody);                return new ResponseEntity<>(JSON.parseObject(resBody, res), e.getStatusCode());            } 

一开始我这样写,死活返回的都是null

原来跟我设置的requestFactory有关

采用SimpleClientHttpRequestFactory 无法获取提示

需要换成 HttpComponentsClientHttpRequestFactory

RestTemplate通过对象传参,response的body为空讨论

代码复现

实体类

@Entity@Table(name = \"a\",schema = \"a\")@JsonIgnoreProperties(value = {\"a\"})@Setter@Generatedpublic class C {    @Id    @GeneratedValue    private Integer id;    @Column(name = \"diseaseName\",length = 255,nullable = false,unique = true)    private String diseaseName;    @Column(name = \"description\",length = 255,nullable = false,unique = true)    private String description;    @Column(name = \"department\",length = 255,nullable = false,unique = true)    private String department;}controller@ResponseBody    @RequestMapping(value = \"\",method = RequestMethod.POST)    public Response APIcreate(@RequestBody C c) {        String json = JSONUtil.toJSONString(c);        HttpHeaders headers = new HttpHeaders();        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);        HttpEntity<String> entity = new HttpEntity<>(json, headers);        String url = \"http://localhost:3001/c\";        ResponseEntity<Commondisease> responseEntity = restTemplate.postForEntity(url, entity, C.class);        return new ResponseData(ExceptionMsg.SUCCESS, responseEntity);    }

返回结果截图:

RestTemplate(401,获取错误信息的处理方案)

返回结果为空的讨论:返回的C类是jpa封装后的类,即使通过json工具,也无法转换成功

解决办法一:实体类转成普通类

import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor; @Data@AllArgsConstructor@NoArgsConstructorpublic class C {     private Integer id;     private String diseaseName;     private String description;     private String department; } @ResponseBody    @RequestMapping(value = \"\",method = RequestMethod.POST)    public Response APIcreate(@RequestBody C c) {        //C c = new Commondisease(1,\"zhangsan\",\"11\",\"2222\");        String json = JSONUtil.toJSONString(c);        HttpHeaders headers = new HttpHeaders();        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);        HttpEntity<String> entity = new HttpEntity<>(json, headers);        String url = \"http://localhost:3001/c/\";        ResponseEntity<Commondisease> responseEntity =         restTemplate.postForEntity(url,entity,C.class);        return new ResponseData(ExceptionMsg.SUCCESS,responseEntity);}

返回成功

解决办法二:添加注解

@Data

以上为个人经验,希望能给大家一个参考,也希望大家多多支持趣讯吧。

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

(0)
nan
上一篇 2021-08-19
下一篇 2021-08-20

相关推荐

  • 泛型方法的定义和使用(泛型方法的定义)

    泛型方法的定义/***泛型参数的无返回值方法**1、public与返回值中间非常重要,可以理解为声明此方法为泛型方法。*2、只有声明了的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。*3、表明该方法将使用泛型类型T

    2022-01-07
    0
  • 阿联酋航空发布世界最高广告:空姐站828米塔尖手持标牌

    站在828米的高空拍摄的广告,到底有多震撼?让我们一睹为快!据媒体报道,近日,阿联酋航空拍摄了一只创意广告,而其拍摄地点,则是在被称为&ldquo;世界第一高楼&rdquo;的&ldquo;哈利法塔&rdq

    2021-08-19
    0
  • 目前疫情仍可控(河南禹州55例确诊多与一企业有关)

    从2022年1月1日到1月5日,5天时间,河南省本轮疫情已经累计确诊74例本土病例,涉及郑州市、许昌市、洛阳市、周口市、商丘市、固始县6个城市。而河南许昌下辖的禹州市,截至6日中午12点,累计已有55例本土确诊病例。新闻1+1连线河南省许昌禹州市市长

    2022-01-07
    0
  • 2021新生儿入户办理流程(上户口需要什么资料)

    孩子出生后,家里多了一个新成员,自然就要给孩子上户口了。那么新生婴儿上户口需要准备哪些资料呢?其实也挺简单,主要是以下四个:一、夫妻双方身份证+复印件夫妻双方身份证同时复印到一张A4纸上即可,具体到户籍部门按照要求复印就好。二、夫妻双

    2021-12-14
    0
  • 农历七月十五鬼节禁忌(农历七月十五鬼节有哪些忌讳)

      导读:今年农历七月已经到来,距离七月十五鬼节真的没剩几天了,因为这天是祭祀节日,又是鬼魂出没的日子,所以这天是有很多忌讳的。那么,农历七月十五鬼节禁忌是什么?农历七月十五

    2021-08-16
    0
  • 新年祝福贺词(2022年新年祝福贺词小学生)

    1-新春佳节,祝你虎年大吉大利,大显身手,虎气冲天!2-在新春佳节到来之际,祝您全家身体健康,万事如意!3-虎年到来,祝福您及家人身体健康!事事顺心!笑容满面!吉祥如意!4-金虎抱喜去,银虎衔瑞来。给您拜年啦,祝您新春快乐,阖家幸福,万事如意。

    2022-01-07
    0

发表回复

登录后才能评论