支持

2011-12-06 123 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来定义它们。我将编辑我的回复 –