当我收到单个元素时,Axios GET请求失败,状态代码为500(但是当我收到很多元素时却没有)

时间:2018-04-05 10:35:48

标签: javascript rest get axios

我正在学习Axios,在实践一些简单的例子时,我遇到了一个奇怪的错误。 我使用GET请求来呈现存储在数据库中的文章。当我从后端发送多个时,它在前端工作得很好,但是当我只发送一个时就不行。

我在控制台中打印从数据库中检索到的信息,然后在响应中发送它,因此我确信请求本身是正确的,并且检索到的信息应该是它应该是什么。所以问题必须在答案中,我想。

我会尝试提供所有相关代码。

后端

Hibernate DAO

public ArrayList<Noticias> getNoticias(){
    ArrayList<Noticias> noticias = null;
    try {
        session.beginTransaction();
        List l = session.createQuery("from Noticias").list();
        noticias = new ArrayList((List<Noticias>) l);
        session.getTransaction().commit();

    } catch (Exception e) {
        e.printStackTrace();
        session.getTransaction().rollback();
    }
    return noticias;
}

public Noticias getNoticia(String id) {
    Noticias n = null;
    try {
        session.beginTransaction();
        n = (Noticias) session.createQuery("from Noticias where id=" + id).getSingleResult();
        session.getTransaction().commit();
    } catch (Exception e) {
        e.printStackTrace();
        session.getTransaction().rollback();
    }
    return n;
}

REST服务

@Path("/noticias")
public class NoticiasREST {

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public Response getNoticias() {
      DAONoticias dnoticias = new DAONoticias();
      ArrayList<Noticias> noticias = new ArrayList(dnoticias.getNoticias());
      noticias.forEach(noticia -> {
          System.out.println("Id: " + noticia.getId()
                              + " Autor: " + noticia.getUsuarios().getNombre()
                              + " Titulo: " + noticia.getTitulo()
                              + " Contenido: " + noticia.getTexto()
                              + " Fecha: " + noticia.getFecha());
      });
      return Response.ok(noticias).build();
  }

  @GET
  @Path("/{id}")
  @Produces(MediaType.APPLICATION_JSON)
  public Response getNoticia(@PathParam("id") String id) {
      DAONoticias dnoticias = new DAONoticias();
      Noticias noticia = new Noticias(dnoticias.getNoticia(id));
      System.out.println("Id: " + noticia.getId()
                          + " Autor: " + noticia.getUsuarios().getNombre()
                          + " Titulo: " + noticia.getTitulo()
                          + " Contenido: " + noticia.getTexto()
                          + " Fecha: " + noticia.getFecha());
      return Response.ok(noticia).build();
  }
}

前端

JS(servicios.js)

function prueba3() {
  axios.get('rest/noticias/5')
  .then(function (response) {
      $.map(response.data, function(noticia) {
          $("main").append(genNoticia(noticia));
      });
  });
}

function prueba4() {
    axios.get('rest/noticias')
    .then(function (response) {
        $.map(response.data, function(noticia) {
            $("main").append(genNoticia(noticia));
        });
    });
}

function genNoticia(noticia) {
    return '<div class="noticia">' +
           '<p>Título: ' + noticia.titulo + '</p>' +
           '<p>ID: ' + noticia.id + '</p>' +
           '<p>Autor: ' + noticia.usuarios.nombre + '</p>' +
           '<p>Fecha: ' + formatFecha(new Date(noticia.fecha)) + '</p>' +
           '<p>Contenido: ' + noticia.texto + '</p>' +
           '</div>';
}

JSP

<html>
  <jsp:include page="head.jspf" />
  <jsp:include page="nav.jspf" />

  <main id="main">

    <script>prueba3();</script>
    <script>prueba4();</script>

  </main>

  <jsp:include page="footer.jspf" />

</html>
“prueba3”不起作用,而“prueba4”则不起作用。请记住,我在发送响应之前在控制台中打印信息,因此我确信/ rest / noticias / 5正确检索单个文章(正确的文章)及其所有属性。

“prueba3”在Chrome开发者工具中生成以下错误代码:

GET http://localhost:8080/ProyectoScansubs/rest/noticias/5 500 (Internal Server Error)
  (anonymous) @ spread.js:25
  e.exports @ spread.js:25
  e.exports @ spread.js:25
  Promise.then (async)
  r.request @ spread.js:25
  r.(anonymous function) @ spread.js:25
  (anonymous) @ index.js:20
  prueba3 @ servicios.js:68
  (anonymous) @ (index):35

Uncaught (in promise) Error: Request failed with status code 500
  at e.exports (spread.js:25)
  at e.exports (spread.js:25)
  at XMLHttpRequest.l.(:8080/ProyectoScansubs/anonymous function) (https://unpkg.com/axios@0.18.0/dist/axios.min.js:8:3278)

我非常感谢您对这个问题所做的任何投入,因为我在这个问题上很遗憾。

感谢所有花时间阅读本文的人,即使你没有或无法回答。

0 个答案:

没有答案