#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
что нигде не зарегистрировано ни в каких путях
- Ваш контекстный путь
/Example
- Затем ваш контроллер сопоставляется с
/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);
}
}