`
https://www.pegaxchange.com/2016/08/11/jax-rs-java-rest-service-eclipse-tomcat/
Я пытался создать службу рабочего отдыха с помощью этого руководства.
И до сих пор я борюсь.
Я могу видеть домашнюю страницу Tomcat через http://localhost:8080
Но не вижу ни одного запроса GET и т. Д.
Пытался получить по URL ниже
http://localhost:8080/SampleWebProject/search?name=
http://localhost:8080/SampleWebProject/productcatalog/search?name=
http://localhost:8080/SampleWebProject/myRestServices/search?name=
Я все еще получаю 404
Тип отчета о состоянии
Сообщение / SampleWebProject / search
Описание Исходный сервер не нашел текущего представления для целевого ресурса или не хочет раскрывать, что он существует.
Что я делаю не так?
Пытался собрать его 4 раза с нуля, на разных ПК, дважды проверял библиотеки, использовал Postman и Insomnia.
package com.pegaxchange.java.web.rest;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("restservices")
public class MyRESTServices extends ResourceConfig {
public MyRESTServices() {
packages("com.fasterxml.jackson.jaxrs.json");
packages("com.pegaxchange.java.web.rest");
}
}
----------
package com.pegaxchange.java.web.rest;
import java.util.*;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import com.pegaxchange.java.bean.Product;
import com.pegaxchange.java.bean.Status;
@Path("productcatalog")
public class ProductCatalogResource {
private static List<Product> productCatalog;
public ProductCatalogResource() {
initializeProductCatalog();
}
@GET
@Path("search")
@Produces(MediaType.APPLICATION_JSON)
public Product[] searchByName(@QueryParam("name") String name) {
List<Product> products = new ArrayList<Product>();
for (Product p : productCatalog) {
if (name != null && p.getName().toLowerCase().startsWith(name.toLowerCase())) {
products.add(p);
}
}
return products.toArray(new Product[products.size()]);
}
@POST
@Path("insert")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Status insert(Product product) {
productCatalog.add(product);
return new Status("SUCCESS", "Inserted " + product.getName());
}
@GET
@Path("getId")
@Produces(MediaType.APPLICATION_JSON)
public Product get(@QueryParam("id") int id) {
Product product = null;
for (Product p: productCatalog) {
if (id == p.getId() ) {
product = p;
break;
}
}
return product;
}
@POST
@Path("update")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Status update(Product product) {
Status stat = new Status("ERROR", "No ID " + product.getId());
Product prod = get(product.getId());
if (prod != null) {
if (product.getName() != null) {
prod.setName(product.getName());
}
if (product.getUnitPrice() != null) {
prod.setUnitPrice(product.getUnitPrice());
}
stat = new Status("Success", "updated ID " + product.getId());
}
return stat;
}
@DELETE
@Path("delete")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Status delete(@QueryParam("id") int id) {
Status stat = new Status("ERROR", "No ID " + id);
Product product = get(id);
if (product != null) {
productCatalog.remove(product);
stat = new Status("Success", "deleted" + product.getId());
}
return stat;
}
private void initializeProductCatalog() {
if (productCatalog == null) {
productCatalog = new ArrayList<Product>();
productCatalog.add(new Product(1, "Keyboard", 29.99D));
productCatalog.add(new Product(2, "Mouse", 9.95D));
productCatalog.add(new Product(3, "17\" Monitor", 159.49D));
productCatalog.add(new Product(4, "Hammer", 9.95D));
productCatalog.add(new Product(5, "Screwdriver", 7.95D));
productCatalog.add(new Product(6, "English Dictionary", 11.39D));
productCatalog.add(new Product(7, "A House in Bali", 15.99D));
productCatalog.add(new Product(8, "An Alaskan Odyssey", 799.99D));
productCatalog.add(new Product(9, "LCD Projector", 1199.19D));
productCatalog.add(new Product(10, "Smart Thermostat", 1199.19D));
}
}
}
---
package com.pegaxchange.java.bean;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Status implements Serializable {
private static final long serialVersionUID = -9130603850117689481L;
private String status;
private String message;
public Status() {} // needed for JAXB
public Status(String status, String message) {
this.status = status;
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
--
package com.pegaxchange.java.bean;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Product implements Serializable {
private static final long serialVersionUID = 6826191735682596960L;
private int id;
private String name;
private Double unitPrice;
public Product() {} // needed for JAXB
public Product(int id, String name, double unitPrice) {
this.id = id;
this.name = name;
this.unitPrice = unitPrice;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getUnitPrice() {
return unitPrice;
}`enter code here`
public void setUnitPrice(double unitPrice) {
this.unitPrice = unitPrice;
}
}