ondersteuning voor queryparameters in JAX-RS

I did the following tutorial to create a restful webservice with my MySQL db http://netbeans.org/kb/docs/websvc/rest.html

De basis dingen werken goed, maar nu wil ik de servicefunctionaliteit uitbreiden. Hoe kan ik extra parameters toevoegen aan de GET-service? Ik heb dit geprobeerd http://img15.hostingpics.net/pics/708229Capturedcran20111205205553.png maar als resultaat heb ik alle steden. wanneer ik de parameter countryCode links toevoeg, wordt de service localhost: 8080/Data/resources/converter.city /? countryCode = TUR × tamp = 1323114935089 Dit is mijn code

CityFacadeRest.java

@Stateless
@Path("converter.city")
public class CityFacadeREST extends AbstractFacade {
    @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 findAll() {
        return super.findAll();
    }

    @GET
    @Path("{from}/{to}")
    @Produces({"application/xml", "application/json"})
    public List 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

1 antwoord

U moet een andere methode toevoegen

    @GET
    @Produces({"application/xml", "application/json"})
    public City find(@DefaultValue("") @QueryParam("countryCode") String country,
      
    {
       //code to search by the different parameters
    }
1
toegevoegd
Sorry - het is een geheel getal dat niet opvalt. maar dat is het dichtstbijzijnde pad dat je hebt gedefinieerd. als je parameters wilt doorgeven, moet je ze definiëren met QueryParam (@ "Default Value (" ") @QueryParam (" countryCode ") string Land. Ik zal mijn antwoord bewerken
toegevoegd de auteur Arnon Rotem-Gal-Oz, de bron
bedankt maar ik denk dat ik het niet echt begrijp. als ik localhost: 8080/Data/resources/converter.city/TUR roep ik een fout omdat het een integer ID verwacht (primaire sleutel)
toegevoegd de auteur mehdi mehdi, de bron