Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS/JAXB:equals()_Java_Xml_Web Services_Jaxb_Jax Rs - Fatal编程技术网

Java JAX-RS/JAXB:equals()

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

我正在用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.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()类上的插件是唯一的解决方案。”

我猜“插件打开”意味着覆盖。如果不是,那就是你的意思。您需要覆盖它,并描述如何确定对象相等。(还应注意,当覆盖
等于
时,还应覆盖
哈希代码

这就是说,大多数IDE都能为您生成这个。例如,对于Netbeans,我只需右键单击该类,选择“插入代码”,然后选择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