我在Eclipse中搞砸了Maven/Tomcat/Java。我已经制作了这个java servlet,但是当我转到localhost:xxxx/myapp/rest时,我的GET请求没有得到响应,我得到了404。我想如果我把@path放到/rest,我可以向 url 发送一个 GET 请求,但它不起作用。有谁知道问题是什么?谢谢!
@Path("/rest")
public class WorldResource {
@GET
@Produces("application/json")
public String getOrders() {
WorldService service = ServiceProvider.getWorldService();
JsonArrayBuilder jab = Json.createArrayBuilder();
for (Country o : service.getAllCountries()) {
JsonObjectBuilder job = Json.createObjectBuilder();
job.add("iso2Code", o.getCode());
job.add("iso3Code", o.getIso3Code());
job.add("capital", o.getCapital());
job.add("continent", o.getContinent());
job.add("region", o.getRegion());
job.add("surface", o.getSurface());
job.add("population", o.getPopulation());
job.add("government", o.getGovernment());
job.add("latitude", o.getLatitude());
job.add("longitude", o.getLongitude());
jab.add(job);
}
JsonArray array = jab.build();
System.out.println(array);
return array.toString();
}
}
这不是一个servlet,它是一个JAX-RS资源。这在Tomcat中不会"开箱即用",您需要部署JAX-RS实现(如Jersey(。
Servlet 看起来像这样:
@WebServlet(name = "WorldServlet", urlPatterns = {"/rest"})
public class WorldServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
try (PrintWriter out = response.getWriter()) {
... // your code
out.println(array.toString());
}
}
}
因此,您实际上只需要考虑安装 JAX-RS 提供程序。此外,当你这样做时,几率很高,它仍然不会/rest
,因为 JAX-RS 实现通常植根于某个路径,所以你最终可能会得到类似 /resources/rest
的东西。
当然,这一切都是可配置的。
这可能是因为您的 servlet 无法将 POJO 转换为适当的 HTTP 响应。
而不是return array.toString();
试试return Response.status(200).entity(array.toString()).build();