我使用以下方法在Glassfish 4.1上创建了一个简单的JAX-RS类:
@GET
@Produces("application/json")
public ArrayList<VendorDTO> getVendorsJson()
{
VendorModel model = new VendorModel();
return model.getVendors(ds);
}
如果使用http://localhost:8080/APPOCase1/webresources/vendor在浏览器中转储此方法的结果,则所有内容都以json格式显示正常:
结果:
[{"vendorno":1,"name":"ABC Supply Co.","address1":"123 Maple St",".........
如果我检查Chrome Tools中的http标头,我会看到我的状态代码为1,而不是我认为应该是200:
Request URL:http://localhost:8080/APPOCase1/webresources/vendor
Request Method:GET
**Status Code:1 OK**
Request Headersview source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,es;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:8080
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
这是正常的,我怎么能强迫它为200?
答案 0 :(得分:0)
这看起来不正常但我没有看到您的设置有问题。您可以使用Firebug等其他工具检查响应状态代码,以确定它。
要发送状态代码200,您还可以在代码中执行以下操作:
@GET
@Produces("application/json")
public Response getVendorsJson()
{
VendorModel model = new VendorModel();
return Response.ok(model.getVendors(ds)).build();
}
如果这导致JSON的邮件正文编写器出错,请尝试以下操作:
@GET
@Produces("application/json")
public Response getVendorsJson()
{
VendorModel model = new VendorModel();
GenericEntity<List<VendorDTO>> result = new GenericEntity<List<VendorDTO>>(model.getVendors(ds)){ };
return Response.ok(result).build();
}
答案 1 :(得分:0)
原来这是一个CORS问题。我使用的服务器端代码最初是为glassfish 4.0编写的。一旦我在Netbeans中使用Glassfish 4.1设置了一个新的Web项目并添加了Rest服务(Netbeans为其生成CORS过滤器类)。状态代码开始返回预期的代码。