我正在学习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”在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)
我非常感谢您对这个问题所做的任何投入,因为我在这个问题上很遗憾。
感谢所有花时间阅读本文的人,即使你没有或无法回答。