【问题标题】:rest jax-rs : server errorrest jax-rs:服务器错误
【发布时间】:2015-05-16 18:12:26
【问题描述】:

我正在使用 JAX-RS 创建一个小 Web 服务,但我无法访问我的 GET 请求 http://localhost:8080/MyProject/resources/agenda

我只想要 XML 格式的活动列表。

这是我的代码

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.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;


@XmlRootElement(name = "activite")
@XmlAccessorType(XmlAccessType.FIELD)

public class Activite
{

  @XmlElement(name="nomactivite")
  private String but;
  @XmlElement(name="tranchehoraire", type=TrancheHoraire.class)
  private TrancheHoraire trancheHoraire;
  @XmlElement(name="lieu")
  private String lieu;
  //------------------------------------------------------------------------
  public Activite(String but,TrancheHoraire trancheHoraire, String lieu)
  {
    this.but = but;
    this.trancheHoraire = trancheHoraire;
    this.lieu = lieu;
  }
  //------------------------------------------------------------------------
  public String         getBut()            { return but; }

  public String getLieu() { return lieu; }

  public TrancheHoraire getTrancheHoraire() { return trancheHoraire; }

  public void setBut(String but) { 
    this.but = but; 
  } 

  public void setTrancheHoraire(TrancheHoraire trancheHoraire) { 
    this.trancheHoraire = trancheHoraire; 
  } 

  public void setLieu(String lieu) { 
    this.lieu = lieu; 
  } 
}

我的数据库:

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

议程 = ActiviteResource

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;


@Path("/agenda")
public class Agenda
{

    @GET
    @Produces("application/xml")
    public List<Activite> getActivites() { 
        System.out.println("getActivites"); 
        System.out.println(ActiviteBD.getActivites());
        return ActiviteBD.getActivites(); 
    } 

    @GET   
    @Path("/{jour}/{mois}/{annee}/{part_j}")
    @Produces("application/xml")
    public Activite getActiviteByDate(@PathParam("jour") int jour, @PathParam("mois") int mois, @PathParam("annee") int annee, @PathParam("part_j") int part_j) { 
        System.out.println("getActivite"); 
        TrancheHoraire tranche = new TrancheHoraire(new Date(jour, mois, annee), part_j);
        for (Activite current : ActiviteBD.getActivites()) { 
            if (tranche.equals(current.getTrancheHoraire())) {
                return current;
            } 
        } 
        return null; 
    } 
}

我的约会课程

package com.project.test;


public class Date
{

  private int jour,mois,annee;

  public Date(int jour, int mois, int annee)
  {

    this.jour   = jour;
    this.mois   = mois;
    this.annee  = annee;
  }


  public int getJour()   { return jour; }
  public int getMois()   { return mois; }
  public int getAnnee()  { return annee; }

  public String toString()
  {
    return
         jour + "/"
         + mois + "/"
         + annee;
  }

}

还有我的 TrancheHoraire 课程

package com.project.test;

public class TrancheHoraire
{

  private Date date;
  private int part_journee;
  public String part_journee_v;

  public TrancheHoraire(Date date, int part_journee)
  {
    this.date = date;
    this.part_journee = part_journee;

        if (part_journee == 1){
            this.part_journee_v = "le matin";
        }
        else{
            if (part_journee == 2){
                this.part_journee_v = "l' apres-midi";
            }
            else
            {
                this.part_journee_v = "erreur";
            }
        }

  }

  public Date getDate() { return date; }

  public int  getpart_journee()
  {
      return part_journee;
  }


  @Override
  public String toString()
  {
    return ("Tranche horaire du " + date +" -> " + part_journee_v);
  }

}

有关信息,ApplicationConfig 包含:

private void addRestResourceClasses(Set<Class<?>> resources) {
    resources.add(com.project.test.Agenda.class);
} 

我在 NetBeans 上使用 GlassFish、JAVA 6 创建了我的 Web Java 应用程序。

当我在“议程”中添加“HelloWorld”GET 方法时,它可以工作。 所以我认为问题不在于设置。

在我的控制台中,当我调用议程时:

[com.project.airbus.Activite@2d30af8c, com.project.airbus.Activite@7e5dac9c, com.project.airbus.Activite@da9eec7]

提前谢谢大家

【问题讨论】:

  • 这里是服务器回答:服务器遇到了一个内部错误,导致它无法完成这个请求
  • 您可以尝试访问该错误吗?

标签: java web-services rest jax-rs


【解决方案1】:

我遇到的唯一问题是这个异常

...IllegalAnnotationsException... Activite does not have a no-arg default constructor.

为了解决这个问题,我只是在 Activite 类中添加了一个无参数构造函数。

此外,您的 GET 请求可能不会遇到这个问题,但是对于 POST 请求,当您尝试发送 XML 时,JAXB 也将无法创建您的其他类,因为它们没有无参数构造函数.所以你不妨将它们添加到你所有的模型类中。

【讨论】:

  • 哦,除了无参数构造函数,setter 也是。
猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 2013-02-17
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多