支持

2011-12-06 119 views
1

我做了以下教程創建我的MySQL一個RESTful Web服務DB http://netbeans.org/kb/docs/websvc/rest.html支持

基本的東西工作正常,但現在我想擴展服務功能。我怎樣才能將其他參數添加到GET服務?我試過這個 http://img15.hostingpics.net/pics/708229Capturedcran20111205205553.png 但結果我有所有的城市。當我添加參數COUNTRYCODE鏈接服務變得localhost:8080/Data/resources/converter.city/?countryCode=TUR×tamp=1323114935089這是我的代碼

CityFacadeRest.java

@Stateless 
@Path("converter.city") 
public class CityFacadeREST extends AbstractFacade<City> { 
    @PersistenceContext(unitName = "DataPU") 
    private EntityManager em; 

    public CityFacadeREST() { 
     super(City.class); 
    } 

    @POST 
    @Override 
    @Consumes({"application/xml", "application/json"}) 
    public void create(City entity) { 
     super.create(entity); 
    } 

    @PUT 
    @Override 
    @Consumes({"application/xml", "application/json"}) 
    public void edit(City entity) { 
     super.edit(entity); 
    } 

    @DELETE 
    @Path("{id}") 
    public void remove(@PathParam("id") Integer id) { 
     super.remove(super.find(id)); 
    } 

    @GET 
    @Path("{id}") 
    @Produces({"application/xml", "application/json"}) 
    public City find(@PathParam("id") Integer id) { 
     return super.find(id); 
    } 

    @GET 
    @Override 
    @Produces({"application/xml", "application/json"}) 
    public List<City> findAll() { 
     return super.findAll(); 
    } 

    @GET 
    @Path("{from}/{to}") 
    @Produces({"application/xml", "application/json"}) 
    public List<City> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) { 
     return super.findRange(new int[]{from, to}); 
    } 

    @GET 
    @Path("count") 
    @Produces("text/plain") 
    public String countREST() { 
     return String.valueOf(super.count()); 
    } 

    @java.lang.Override 
    protected EntityManager getEntityManager() { 
     return em; 
    } 

} 

City.java

@Entity 
@Table(name = "City") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "City.findAll", query = "SELECT c FROM City c"), 
    @NamedQuery(name = "City.findById", query = "SELECT c FROM City c WHERE c.id = :id"), 
    @NamedQuery(name = "City.findByName", query = "SELECT c FROM City c WHERE c.name = :name"), 
    @NamedQuery(name = "City.findByCountryCode", query = "SELECT c FROM City c WHERE c.countryCode = :countryCode"), 
    @NamedQuery(name = "City.findByDistrict", query = "SELECT c FROM City c WHERE c.district = :district"), 
    @NamedQuery(name = "City.findByPopulation", query = "SELECT c FROM City c WHERE c.population = :population")}) 
public class City implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @NotNull 
    @Column(name = "ID") 
    private Integer id; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 35) 
    @Column(name = "Name") 
    private String name; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 3) 
    @Column(name = "CountryCode") 
    private String countryCode; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 20) 
    @Column(name = "District") 
    private String district; 
    @Basic(optional = false) 
    @NotNull 
    @Column(name = "Population") 
    private int population; 

public City() { 
} 

public City(Integer id) { 
    this.id = id; 
} 

public City(Integer id, String name, String countryCode, String district, int population) { 
    this.id = id; 
    this.name = name; 
    this.countryCode = countryCode; 
    this.district = district; 
    this.population = population; 
} 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getCountryCode() { 
    return countryCode; 
} 

public void setCountryCode(String countryCode) { 
    this.countryCode = countryCode; 
} 

public String getDistrict() { 
    return district; 
} 

public void setDistrict(String district) { 
    this.district = district; 
} 

public int getPopulation() { 
    return population; 
} 

public void setPopulation(int population) { 
    this.population = population; 
} 

@Override 
public int hashCode() { 
    int hash = 0; 
    hash += (id != null ? id.hashCode() : 0); 
    return hash; 
} 

@Override 
public boolean equals(Object object) { 
    // TODO: Warning - this method won't work in the case the id fields are not set 
    if (!(object instanceof City)) { 
     return false; 
    } 
    City other = (City) object; 
    if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
     return false; 
    } 
    return true; 
} 

@Override 
public String toString() { 
    return "converter.City[ id=" + id + " ]"; 
} 

} 

回答

1

您需要添加另一種方法

@GET 
    @Produces({"application/xml", "application/json"}) 
    public City find(@DefaultValue("") @QueryParam("countryCode") String country, 
     <any other parameters you want to allow> 
    { 
     //code to search by the different parameters 
    } 
+0

謝謝,但我認爲我不太明白。如果我調用本地主機:8080 /數據/資源/ converter.city/TUR我有一個錯誤,因爲它期望一個整數ID(主鍵) –

+0

對不起 - 這是一個整數沒有注意到。但這是您定義的最接近的路徑。如果你想傳遞一個參數,你需要使用QueryParam(@DefaultValue(「」)@QueryParam(「CountryCode」)string Country來定義它們。我將編輯我的回覆 –