支持JAX-RS中的查询参数



我做了下面的教程来创建一个restful webservice与我的mysql 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 + " ]";
}
}

您需要添加另一个方法

    @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
    }

相关内容

  • 没有找到相关文章

最新更新