在REST服务中使用ContainerResponse筛选器时,GET正在工作,但POST不工作
GET is working but POST not when using ContainerResponse filter in REST-services?
我开始将我的软件从Primefaces更改为HTML5客户端-服务器解决方案。
问题:同源策略在使用POST时失败,但在使用GET时有效。
WEB服务
@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Users entity) {
super.create(entity);
}
@GET
@Override
@Produces({"application/xml", "application/json"})
public List<Users> findAll() {
return super.findAll();
}
过滤器
public class CrossOriginResourceSharingFilter implements ContainerResponseFilter {
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
response.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
response.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "content-type");
return response;
}
}
WEB.XML
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>entity.CrossOriginResourceSharingFilter</param-value>
</init-param>
客户
<form id="register-form">
<div class="register-form-block">
<input type="text" value='Your first name' name="firstName" id="firstName"/>
</div>
<div class="register-form-block">
<input type="text" value='Your surname' name="lastName" id="lastName" onclick="this.value = ('')" />
</div>
<div class="register-form-block">
<input type="text" value='Username' name="username" id="username" onclick="this.value = ('')"/>
</div>
<div class="register-form-block">
<input type="password" value='Password' name="password" id="password" onclick="this.value = ('')"/>
</div>
<div class="register-form-block">
<input type="password" value='Password again' name="passwordagain" onclick="this.value = ('')"/>
</div>
<button type="submit" class="btn btn-primary" id="btnAddUser" onclick="foo()">Register</button>
</form>
<script>
function foo(){
alert('Button pressed');
$.ajax({
type: 'POST',
contentType: 'application/json',
url: 'http://127.0.0.1:8080/testsoft/webresources/entity.users/',
dataType: "json",
data: formToJSON(),
success: function(data, textStatus, jqXHR) {
alert('User created successfully');
},
error: function(jqXHR, textStatus, errorThrown) {
alert('addUser error: ' + textStatus +' ERROR:'+ errorThrown);
}
});
};
function formToJSON() {
alert($('#username').val());
return JSON.stringify({
"username": $('#username').val(),
"firstName": $('#firstName').val(),
"lastName": $('#lastName').val(),
"password": $('#password').val(),
});
}
</script>
错误
Failed to load resource: the server responded with a status of 500 (Internal Server Error) (22:49:54:618 | error, network)
at http://localhost:8080/testsoft/webresources/entity.users/
XMLHttpRequest cannot load http://localhost:8080/testsoft/webresources/entity.users/. Origin http://localhost:8383 is not allowed by Access-Control-Allow-Origin. (22:49:54:618 | error, javascript)
另一个解决方案不起作用,根本没有错误
function foo(){
alert('Button pressed');
console.log('#####################addUser################################');
$.ajax({
type: "POST",
contentType: "application/json",
url: "http://127.0.0.1:8080/testsoft/webresources/entity.users/",
dataType: "json",
data: {"username":"UllaUser","password":"testpwd","firstName":"Unto","lastName":"lastnameson","nickName":null,"isAdmin":false,"isCustomer":false,"isGuest":false,"isActive":true,"isInvemailsent":false,"isInvCardSent":null,"inSaveDateSent":false,"isThankCardSent":false,"weddingAsUser":false,"hasGuestUsers":false,"userRole":null,"email":null,"createDate":null,"turnout":null,"lastUpdated":1360240740000,"secretQuestion":null,"secretAnswer":null,"weddingWeddingId":null,"languageLanguageId":null,"invitationInvitationId":null,"emailEmailId":null,"addressAddressId":null},
success: function(data){
// we have the response
alert("Server said:'n '" + data.username + "'");
},
error: function(data) {
alert('addUser error: ' + data.username);
}
});
};
这可能是因为一些浏览器(如chrome)沙盒localhost
。试着插入你的ip而不是localhost,看看这是否有什么作用。
相关文章:
- Jquery Ajax POST不工作.适用于GET
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- GET在POST不工作XMLHttpRequest的情况下正常工作
- Jquery Ajax POST方法不工作,返回未定义的值
- $.post 仅使用警报工作
- Jquery Post方法在本地工作,但在服务器上不工作
- 跨源请求被POST阻止,但浏览器上的req可以正常工作,但设备上不工作
- 节点 js POST mysite/uploads 404(未找到)上传到 Azure 时,但在本地工作
- Jquery Post与JSON响应工作
- 角度.js http.post 美元,Codeigniter 不工作
- Ajax Post请求总是运行错误功能,尽管卷曲到相同的url工作正常
- 服务工作线程是否可以缓存 POST 请求
- 无法让 Ajax POST 与 Emberjs 一起工作
- $.AJAX Post在JS中不起作用,但在Advanced Rest Client中工作
- 为什么AJAX $.post不能在wordpress中工作
- $.post之后jQuery日期选择器不工作
- HTML POST->重定向工作,XMLHTTPrequest->重定向不起作用(无法从null发出任何请求
- 将数据以json形式POST到在Phantomjs中不工作的Servlet
- POSTMAN工作时发生角度POST交叉原点错误
- Post在IE9上无法正常工作