Java JAX-RS/JAXB:equals()
我正在用JAX-RS创建一个小Web服务,无法访问我的GET请求{jour} 这是我的密码:Java JAX-RS/JAXB:equals(),java,xml,web-services,jaxb,jax-rs,Java,Xml,Web Services,Jaxb,Jax Rs,我正在用JAX-RS创建一个小Web服务,无法访问我的GET请求{jour} 这是我的密码: package com.project.test; import javax.xml.bind.annotation.XmlRootElement; import java.util.List; import javax.ws.rs.DefaultValue; import javax.ws.rs.PathParam; import javax.ws.rs.GET; import javax.ws.r
package com.project.test;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.PathParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "activite")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"but","trancheHoraire", "lieu"})
public class Activite
{
//-----------------------------------------------------------------------------
// @XmlElement(name="nomactivite")
private String but;
private TrancheHoraire trancheHoraire;
private String lieu;
//-----------------------------------------------------------------------------
public Activite(){
}
public Activite(String but,TrancheHoraire trancheHoraire, String lieu)
{
this.but = but;
this.trancheHoraire = trancheHoraire;
this.lieu = lieu;
}
//-----------------------------------------------------------------------------
public String getBut() { return but; }
public TrancheHoraire getTrancheHoraire() {
return trancheHoraire;
}
public String getLieu() { return lieu; }
public void setBut(String but) {
this.but = but;
}
public void setTrancheHoraire(TrancheHoraire trancheHoraire) {
this.trancheHoraire = trancheHoraire;
}
public void setLieu(String lieu) {
this.lieu = lieu;
}
public Date getDate (){
return this.getTrancheHoraire().getDate();
}
}
贷款类别:
包com.project.test
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
//@XmlType(name = "trancheHoraire", propOrder = {"date", "part_journee"})
public class TrancheHoraire
{
//-----------------------------------------------------------------------------
// @XmlElement(required = true)
private Date date;
// @XmlElement(required = true)
private int part_journee;
public String part_journee_v;
//-----------------------------------------------------------------------------
public TrancheHoraire(){
}
public TrancheHoraire(Date date, int part_journee)
{
this.date = date;
this.part_journee = part_journee;
}
//-----------------------------------------------------------------------------
public Date getDate() { return date; }
public int getpart_journee()
{
return part_journee;
}
}
我的数据库:
package com.project.test;
import java.util.ArrayList;
import java.util.List;
public class ActiviteBD {
private static List<Activite> activites = new ArrayList<Activite>();
static {
activites.add(new Activite("Réunion", new TrancheHoraire(new Date(01, 10, 2015), 2), "Paris"));
activites.add(new Activite("Vacances", new TrancheHoraire(new Date(02, 10, 2015), 2), "Marseille"));
activites.add(new Activite("Resto", new TrancheHoraire(new Date(03, 10, 2015), 2), "Lyon"));
}
public static List<Activite> getActivites() {
return activites;
}
}
package com.project.test;
导入java.util.ArrayList;
导入java.util.List;
公共类活动
私有静态列表活动=新建ArrayList();
静态{
activites.add(新Activite(“Réunion”),新TrancheHoraire(新日期(2015年10月1日),2),“巴黎”);
活动。添加(新活动(“休假”,新的分期付款(新日期(2015年10月2日),2),“马赛”);
activites.add(新activites(“Resto”),新TrancheHoraire(新日期(2015年10月3日),2),“Lyon”);
}
公共静态列表getActivites(){
返回活动;
}
}
我用这个类调用webservices:
package com.project.test;
import java.util.List;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
/**
*
* @author rcaboni
*/
@Path("/agenda")
public class Resource
{
@GET
@Produces("application/xml")
public List<Activite> getActivites() {
return ActiviteBD.getActivites();
}
@GET
@Path("{jour}")
@Produces("application/xml")
public Activite getActiviteByDate(@PathParam("jour") int jour){
System.out.println("getActivite");
Activite tranche = new Activite("Réunion", new TrancheHoraire(new Date(jour, 10, 2015), 2), "Marseille");
TrancheHoraire th = tranche.getTrancheHoraire();
System.out.println(tranche.getDate());
for (Activite _current : ActiviteBD.getActivites()) {
System.out.println(_current.getTrancheHoraire());
if (th.equals(_current.getTrancheHoraire())) {
System.out.println(_current.getTrancheHoraire());
return _current;
}
}
return null;
}
}
package com.project.test;
导入java.util.List;
导入javax.ws.rs.DefaultValue;
导入javax.ws.rs.GET;
导入javax.ws.rs.HeaderParam;
导入javax.ws.rs.Path;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.products;
/**
*
*@rcaboni
*/
@路径(“/议程”)
公共类资源
{
@得到
@生成(“应用程序/xml”)
公共列表getActivites(){
返回ActiviteBD.getActivites();
}
@得到
@路径(“{jour}”)
@生成(“应用程序/xml”)
公共活动getActiviteByDate(@PathParam(“jour”)intJour){
System.out.println(“getActivite”);
Activite分期付款=新Activite(“Réunion”,新分期付款(新日期(2015年10月10日),2),“马赛”);
TrancheHoraire th=tranche.getTrancheHoraire();
System.out.println(tranche.getDate());
对于(Activite _current:ActiviteBD.getActivites()){
System.out.println(_current.getTrancheHoraire());
if(th.equals(_current.getTrancheHoraire())){
System.out.println(_current.getTrancheHoraire());
返回电流;
}
}
返回null;
}
}
如果我调用/agenda,它将返回我的所有活动。
像这样:
但是,如果我调用/agenda/1,它将返回我的第一个活动
在我的控制台中:getranchehoraire返回如下内容:com.project.test。TrancheHoraire@75a630fb
我读过Equals()类上的插件是唯一的解决方案
你能帮我吗?:) 尝试在@Path注释中的{jour}声明之前添加一个/,如下所示:
@Path("/{jour}")
您当前拥有的映射看起来可能是将请求路由到/agenda1
“我读过Equals()类上的插件是唯一的解决方案。”
我猜“插件打开”意味着覆盖。如果不是,那就是你的意思。您需要覆盖它,并描述如何确定对象相等。(还应注意,当覆盖等于
时,还应覆盖哈希代码
)
- 看
equals()和hashcode()
。然后选择要包括在比较中的属性。我选择了全部,得到了这个
@Override
public int hashCode() {
int hash = 5;
hash = 79 * hash + Objects.hashCode(this.date);
hash = 79 * hash + this.part_journee;
hash = 79 * hash + Objects.hashCode(this.part_journee_v);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final TrancheHoraire other = (TrancheHoraire) obj;
if (!Objects.equals(this.date, other.date)) {
return false;
}
if (this.part_journee != other.part_journee) {
return false;
}
if (!Objects.equals(this.part_journee_v, other.part_journee_v)) {
return false;
}
return true;
}
我知道Eclipse有类似的特性
另一方面,你的比较看起来有点奇怪。为什么需要创建新的
活动
?方法是getActiviteByDate
,那么为什么不直接查找带有日期的Activites