代码之家  ›  专栏  ›  技术社区  ›  Nipun Thilanka

在spring boot中使用rest模板调用rest客户端时,出现以下错误的原因是什么

  •  -1
  • Nipun Thilanka  · 技术社区  · 7 年前

    我的代码片段在这里。。。

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
    
        PinsDTO pinsDTO = new PinsDTO();
        pinsDTO.setPin(pin);
        @SuppressWarnings({ "rawtypes", "unchecked" })
        HttpEntity<?> entity = new HttpEntity(pinsDTO, headers);
    
        StringBuilder url = new StringBuilder();
        url.append("url");
    
        URI uri = null;
        try {
            uri = new URI(url.toString());
        } catch (URISyntaxException e) {
    
        }
        String seskey = null;
        try {
            ResponseEntity<Object> responseEntity = restTemplate.exchange(uri, HttpMethod.POST, entity, Object.class);
    
            ServiceResponse response = new ServiceResponse();
            response = (ServiceResponse) responseEntity.getBody();
            if (response.specifiedCode.equals("202")) {
                seskey = "";
            } else if (response.specifiedCode.equals("406")) {
    
                seskey = "INVALID";
    
            } else if (response.specifiedCode.equals("400")) {
                seskey = "NO";
            }
    
        } catch (RestClientException rce) {
            rce.printStackTrace();
        }
    

    这是我的错误。。。。

    组织。springframework。网状物客户HttpClientErrorException:406 at 组织。springframework。网状物客户DefaultResponseErrorHandler。handleError(DefaultResponseErrorHandler.java:92) 在 组织。springframework。网状物客户DefaultResponseErrorHandler。handleError(DefaultResponseErrorHandler.java:77) 在 组织。springframework。网状物客户ResponseErrorHandler。handleError(ResponseErrorHandler.java:63) 在 组织。springframework。网状物客户RestTemplate。HandlerResponse(RestTemplate.java:747) 在 组织。springframework。网状物客户RestTemplate。doExecute(RestTemplate.java:700) 在 组织。springframework。网状物客户RestTemplate。执行(RestTemplate.java:674) 在 组织。springframework。网状物客户RestTemplate。exchange(RestTemplate.java:592) 在 lk。对话ccs。零售贷款。ussd。模型RetailLoanUssdManager。pinValidate(RetailLoanUssdManager.java:786) 在 lk。对话ccs。零售贷款。ussd。控制器。零售业控制者。pinvalidation(RetailLoanUssdController.java:53) 在太阳。反映NativeMethodAccessorImpl。调用0(本机方法) 太阳反映NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:62) 在 太阳反映DelegatingMethodAccessorImpl。调用(DelegatingMethodAccessorImpl.java:43) 在java。郎。反思。方法调用(Method.java:498) 组织。springframework。网状物方法支持InvocableHandler方法。doInvoke(InvocableHandlerMethod.java:209) 在 组织。springframework。网状物方法支持InvocableHandler方法。invokeForRequest(InvocableHandlerMethod.java:136) 在 组织。springframework。网状物servlet。mvc。方法注释。ServletinVocableHandler方法。invokeAndHandle(ServletInvocableHandlerMethod.java:102) 在 组织。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。invokeHandlerMethod(RequestMappingHandlerAdapter.java:871) 在 组织。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。handleInternal(RequestMappingHandlerAdapter.java:777) 在 组织。springframework。网状物servlet。mvc。方法AbstractHandlerMethodAdapter。句柄(AbstractHandlerMethodAdapter.java:87) 在 组织。springframework。网状物servlet。DispatcherServlet。doDispatch(DispatcherServlet.java:991) 在 组织。springframework。网状物servlet。DispatcherServlet。doService(DispatcherServlet.java:925) 在 组织。springframework。网状物servlet。FrameworkServlet。processRequest(FrameworkServlet.java:978) 在 组织。springframework。网状物servlet。FrameworkServlet。doGet(FrameworkServlet.java:870) 在javax。servlet。http。HttpServlet。服务(HttpServlet.java:635) 组织。springframework。网状物servlet。FrameworkServlet。服务(FrameworkServlet.java:855) 在javax。servlet。http。HttpServlet。服务(HttpServlet.java:742) 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。internalDoFilter(ApplicationFilterChain.java:231) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。doFilter(ApplicationFilterChain.java:166) 在 组织。阿帕奇。公猫websocket。服务器WsFilter。doFilter(WsFilter.java:52) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。internalDoFilter(ApplicationFilterChain.java:193) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。doFilter(ApplicationFilterChain.java:166) 在 组织。springframework。网状物滤器RequestContextFilter。doFilterInternal(RequestContextFilter.java:99) 在 组织。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:107) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。internalDoFilter(ApplicationFilterChain.java:193) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。doFilter(ApplicationFilterChain.java:166) 在 组织。springframework。网状物滤器HttpPutFormContentFilter。doFilterInternal(HttpPutFormContentFilter.java:108) 在 组织。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:107) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。internalDoFilter(ApplicationFilterChain.java:193) 在 在 组织。springframework。网状物滤器隐藏HttpMethodFilter。doFilterInternal(HiddenHttpMethodFilter.java:81) 在 组织。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:107) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。internalDoFilter(ApplicationFilterChain.java:193) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。doFilter(ApplicationFilterChain.java:166) 在 组织。springframework。网状物滤器字符编码过滤器。doFilterInternal(CharacterEncodingFilter.java:200) 在 组织。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:107) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。internalDoFilter(ApplicationFilterChain.java:193) 在 组织。阿帕奇。卡特琳娜。果心应用程序过滤器链。doFilter(ApplicationFilterChain.java:166) 在 组织。阿帕奇。卡特琳娜。果心标准包装阀。调用(StandardWrapperValve.java:199) 在 组织。阿帕奇。卡特琳娜。果心标准连接阀。调用(StandardContextValve.java:96) 在 组织。阿帕奇。卡特琳娜。验证器。AuthenticatorBase。调用(AuthenticatorBase.java:478) 在 组织。阿帕奇。卡特琳娜。果心标准主阀。调用(StandardHostValve.java:140) 在 组织。阿帕奇。卡特琳娜。阀门。错误报告阀。调用(ErrorReportValve.java:81) 在 组织。阿帕奇。卡特琳娜。果心标准发动机阀。调用(StandardEngineValve.java:87) 在 组织。阿帕奇。卡特琳娜。连接器。郊狼适配器。服务(CoyoteAdapter.java:342) 在 组织。阿帕奇。郊狼。http11.http11处理器。服务(Http11Processor.java:803) 在 组织。阿帕奇。郊狼。AbstractProcessorLight。进程(AbstractProcessorLight.java:66) 在 组织。阿帕奇。郊狼。AbstractProtocol$ConnectionHandler。过程(AbstractProtocol.java:868) 在 组织。阿帕奇。公猫util。网NioEndpoint$SocketProcessor。doRun(NioEndpoint.java:1459) 在 组织。阿帕奇。公猫util。网SocketProcessorBase。运行(SocketProcessorBase.java:49) 在 Java语言util。同时发生的线程池执行器。runWorker(ThreadPoolExecutor.java:1149) 在 Java语言util。同时发生的ThreadPoolExecutor$Worker。运行(ThreadPoolExecutor.java:624) 在 组织。阿帕奇。公猫util。螺纹。TaskThread$WrappingRunnable。运行(TaskThread.java:61) 在java。lang.Thread。运行(Thread.java:748)

    1 回复  |  直到 7 年前
        1
  •  0
  •   Maciej Kowalski    7 年前

    您已经在标题中设置了内容类型,但没有设置accept标题。显然,您调用的服务返回的是非隐式内容类型。

    因此,找出服务内容类型是什么,并在客户端头配置中提供:

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.setAccept(Arrays.asList(MediaType.xxx, MediaType.yyy));