使用HttpURLConnection

时间:2019-06-17 15:49:28

标签: spring-mvc java-ee-7

我对此代码感到生气。 无论我是否在具有main方法的类中或在tomcat服务器上将代码作为java应用程序运行,都成功。

public class Test {

    public static void main(String[] args) {
        try { 

            String userCredentials = "USR28:YG739G5XFVPYYV4ADJVW";
            String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));

            URL url = new URL("http://74.208.84.251:8221/QosicBridge/user/deposit"); 
            HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
            conn.setDoOutput(true); conn.setRequestMethod("POST"); 
            conn.setRequestProperty("Content-Type", "application/json"); 
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty ("Authorization", basicAuth);

            String input = "{\"msisdn\":\"22997858711\",\"amount\":500,\"transref\":\"CZ21FRY3XDPGDBX7L745\",\"clientid\":\"UBHQ\"}";
            System.out.println(input); 

            OutputStream os = conn.getOutputStream(); 
            os.write(input.getBytes()); 
            os.flush(); 

            if (conn.getResponseCode() != 200) { 
                throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); 
            } 

            BufferedReader br = new BufferedReader(new InputStreamReader( (conn.getInputStream()))); 
            String output; 
            System.out.println("Output from Server .... \n"); 

            while ((output = br.readLine()) != null) { 
                System.out.println(output); 
            } conn.disconnect(); 
        } catch (MalformedURLException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }
    }

}

在Tomcat服务器上运行代码时降低错误

我需要帮助以进行故障排除。在错误消息下方找到

非常感谢

  

2019年6月17日下午4:25:48 org.apache.catalina.core.StandardWrapperValve   调用GRAVE:Servlet.service()du Servlet [spring]上下文   au chemin [/ padme]异常重现[请求处理   失败嵌套的异常是java.lang.RuntimeException:失败:HTTP   错误代码:404],原因为java.lang.RuntimeException:失败:   HTTP错误代码:404,位于   com.controller.MakeDepositController.postTransferToMerchantAccount(MakeDepositController.java:103)     在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)在   org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)     在   org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)     在   org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)     在   org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)     在   org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)     在   org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)     在   org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)     在   org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)     在   org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)     在   org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:660)在   org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:741)处   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)     在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)     在   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)     在   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)     在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:316)     在   org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)     在   org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158)     在   org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:120)     在   org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)     在   org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)     在   org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)     在   org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)     在   org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)     在   org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)     在   org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)     在   org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)     在   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)     在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)     在   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)     在   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)     在   org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)     在   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)     在   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)     在   org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)     在   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)     在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)     在   org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)     在   org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)     在   org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:836)     在   org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1839)     在   org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)     在   java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)     在   org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)     在java.lang.Thread.run(Thread.java:748)

1 个答案:

答案 0 :(得分:0)

我认为错误来自传递给请求的json对象。当我使用字符串对象(注释中的directInput)时,它工作正常。但是,当我使用Json对象(jsonInput)时,它给了我404错误代码。任何人都可以帮助排除故障吗?

谢谢

public class Test {

public static void main(String[] args) {
    try { 

        String userCredentials = "USR28:YG739G5XFVPYYV4ADJVW";
        String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));

        URL url = new URL("http://74.208.84.251:8221/QosicBridge/user/deposit"); 
        HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST"); 
        conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty ("Authorization", basicAuth);

        //String directInput = "{\"msisdn\":\"22997858711\",\"amount\":1400,\"transref\":\"JDQY78J6ABX68F0T56FP\",\"clientid\":\"UBHQ\"}";

        DepositObject d = new DepositObject();
        d.setMsisdn("22997858711");
        d.setAmount(1400);
        d.setTransref("JDQY78J6ABX68F0T56FP");
        d.setClientid("UHBQ");

        Gson gson = new Gson();
        String jsonInput = gson.toJson(d).toString();

        OutputStream os = conn.getOutputStream();
        os.write(jsonInput.getBytes()); 
        os.flush(); 

        if (conn.getResponseCode() != 200) { 
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); 
        } 

        BufferedReader br = new BufferedReader(new InputStreamReader( (conn.getInputStream()))); 
        String output; 
        while ((output = br.readLine()) != null) { 
            System.out.println(output); 
        } 

        conn.disconnect();

    } catch (MalformedURLException e) { 
        e.printStackTrace(); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    }
}

}