Веб-служба RESTful с Ajax

#java #ajax #web-services #rest

#java #ajax #веб-сервисы #rest

Вопрос:

Я новичок в веб-сервисах и пытаюсь использовать веб-сервисы RESTful. Я пытаюсь передать параметр на веб-сервер RESTful на Java из ajax. Вот что я сделал

index.html

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div id="add">
        Add : <input type="text" name="name" id="name">
        <input type="submit" id="submitAdd">
    </div>
</body>
<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"></script>
<script>

$(document).ready(function ()) {

$("#submitAdd").click(function() {
  var data = { name : $("#name").val() };
  $.ajax({
        type: "GET",
        url: "http://localhost:8080/Example/Rest/controller/return",
        data: data,
        dataType : "json",
        success : function(rdata) {

        }
  });
})
})
</script>
</html>
  

Controller.java

 package com.controller;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("/controller")
public class Controller {

    @GET
    @Path("/return")
    @Consumes("application/json")
    public void add(String msg) {
        System.out.println("name "  msg);
    }
}
  

Web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>StockMonitor</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 <servlet>
<servlet-name>Example</servlet-name>
<servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
<init-param>
         <param-name>com.sun.jersey.config.property.packages</param-name>
         <param-value>com.controller</param-value>
    </init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Example</servlet-name>
<url-pattern>/Rest/*</url-pattern>
</servlet-mapping>
</web-app>
  

Вот структура файла

   Example 
     src
        ->com.controller
                        ->Controller.java
     WebContent
        ->META_INF
        ->WEB-INF
        ->index.html
  

Банки, которые я использую, являются —

все банки Jersey JAX-RS 2.0 RI bundle из https://jersey.java.net/download.html

Когда я ввожу это в браузере http://localhost:8080/Example/Rest/controller/return Я понимаю HTTP Status 404 Error . Я не могу это исправить. Может кто-нибудь, пожалуйста, скажите мне, в чем ошибка?

Ответ №1:

Вы получаете 404, потому /Rest что нигде не зарегистрировано ни в каких путях

  1. Ваш контекстный путь /Example
  2. Затем ваш контроллер сопоставляется с /controller

Таким образом, у вас нет сопоставления для разрешения /Rest , поскольку ваш контроллер привязан к /controller пути URI

Либо удалите /Rest для вашего URL-адреса и обновите отображение сервлета в web.xml

 <servlet-mapping>
 <servlet-name>Example</servlet-name>
 <url-pattern>/*</url-pattern>
</servlet-mapping>
  

или

Добавьте /Rest в свой контроллер сопоставление путей

 @Path("/Rest/controller")
public class Controller {
  

Комментарии:

1. Даже после добавления @Path("/Rest/Controller") эта ошибка сохраняется. Могут ли быть какие-либо проблемы с банками?

Ответ №2:

Удалите аннотацию @Path(«/ return») в вашем методе add(строка msg). Вам нужно только вернуться с пути / Rest / controller и является конечной точкой вашего ресурса. аннотация @Path(«/controller) будет искать @GET в классе ресурсов.

  package com.controller;

 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;

 @Path("/controller")
 @Consumes("application/json")
 public class Controller {

    @GET 
     public void add(String msg) {
         System.out.println("name "  msg);
    } 
}