2011-12-06 3 views
1

I http://netbeans.org/kb/docs/websvc/rest.htmlサポート

dbの基本的な事柄を、私のMySQLで安らかなWebサービスを作成するには、次のチュートリアルでは正常に動作しますが、今、私はサービスの機能を拡張したいでした。追加のパラメータを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

ありがとうございますが、私は本当に理解していないと思います。私がlocalhost:8080/Data/resources/converter.city/TURを呼び出すと、整数ID(主キー)を期待しているのでエラーが出る –

+0

残念です。それはあなたが定義した最も近いパスです。パラメータを渡す場合は、QueryParam(@DefaultValue( "")@QueryParam( "countryCode")string Countryで定義する必要があります。 –