#java #maven #tomcat
Вопрос:
Поэтому я создал этот ресурс, который возвращает массив продуктов.
public class MyResource {
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
public Object getbook()
{
Products p = new Products();
Gson gson = new GsonBuilder().create();
return gson.toJson(p.getAll());
}
Но когда я вызываю этот api из своего интерфейса, он говорит
Доступ к XMLHttpRequest по адресу ‘http://localhost:8085/demoRest/webapi/myresource» от происхождения «http://localhost:8083» заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок «Управление доступом-Разрешить-Происхождение».
вот мой запрос ajax
$(function() {
var val = "";
$("#submit").click(function(event){
event.preventDefault();
$.ajax({
type: "GET",
dataType:"json",
url: "http://localhost:8085/demoRest/webapi/myresource",
success: function(data) {
console.log("response:" data);
//$.each(data, function(j, pdata) {
// val= val "[ " pdata.title " " pdata.author "]";
// });
// $("#data").text(val);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(' Error in processing! ' textStatus);
}
});
});
});
Мой Webxml
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.demoRest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
Использование tomcat версии 10
Ответ №1:
Так что, я думаю, вам следует узнать о политике CORS.
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Пользователь заблокирует запрос, если вы используете XMLHttpRequest с хоста A на хост B без разрешения Хоста B.
Однако мы можем передать CORS, добавив несколько заголовков на хосте B. Серверный api часто использует эту политику для обработки множества различных запросов, поступающих с разных хостов.
Вы можете привести пример здесь:
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Origin", "*");
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");
Более подробно:
https://howtodoinjava.com/java/servlets/java-cors-filter-example/