【问题标题】:java.net.MalformedURLException: unknown protocol: localhost at controller.RestController.addService(RestController.java:62)java.net.MalformedURLException:未知协议:控制器上的 localhost.RestController.addService(RestController.java:62)
【发布时间】:2016-10-08 18:34:21
【问题描述】:

我正在尝试向服务器发布 http 帖子,但我从控制器收到格式错误的 url 异常

控制器代码

public static final String REST_SERVICE_URI = "localhost:8081/create";

控制器中从服务器接收请求的方法

@RequestMapping(value="AddService",method = RequestMethod.POST)
@ResponseBody
 public void addService(@ModelAttribute("servDetForm")) throws IOException{
    //return dataServices.addService(tb);

     URL serv;
     URLConnection yc;
    try {
        serv = new URL(REST_SERVICE_URI);
          yc = serv.openConnection();
        try {
            yc = serv.openConnection();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         BufferedReader in;
         in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

         String inputLine;

         while ((inputLine = in.readLine()) != null) 
             System.out.println(inputLine);
         in.close();

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
 }

这是我的jsp视图

<form:form method="POST" commandName="servDetForm" action="AddService">
              <table style="appearance:dialog ">

                    <tr>
                        <td>Number</td>
                        <td><form:input path="Numbers"/></td>
                    </tr>

我哪里错了?

【问题讨论】:

  • localhost 是主机名而不是协议。您需要在 REST_SERVICE_URI 中指定协议 http/https 等。所以应该是http://localhost:8081/ItaxServ/create
  • 使用这个 localhost:8081/ItaxServ/create 会出现类似 java.io.IOException: Server returned HTTP response code: 400 for URL: localhost:8081/ItaxServ/create 的错误

标签: java spring jsp http spring-mvc


【解决方案1】:

网址应该是这样的:

"http://localhost:8081/ItaxServ/create"

或许

"https://localhost:8081/ItaxServ/create"

更新 - 我假设您的 URL 中有正确的路径。如果没有,那么您也需要修复它。)

“http”或“https”是解析器正在查找的 URL 的协议部分。没有协议的 URL 不是有效的 URL。 (它是一个相对 URI,只能相对于另一个 URL 进行解析。)

(URI 解析器将第一个冒号之前的内容解释为协议。在您损坏的 URL 中,这意味着主机名(“localhost”)被错误地视为协议字符串。但是,没有注册协议具有该名称的协议的处理程序......所以解析器说“未知协议”。)


提示:你能看出这之间的区别吗:

@RequestMapping(value = "AddService", method = RequestMethod.POST)

还有这个:

@RequestMapping(value = "/create", method = RequestMethod.POST)

“/”字符的意义是什么?

【讨论】:

  • 这应该被标记为答案。添加 http:// 解决了我的问题
【解决方案2】:

格式错误的 url 异常与您作为 "REST_SERVICE_URI" 传递的 URI 相关

需要使用http, https等有效协议传递REST_SERVICE_URI

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2019-03-28
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多