【发布时间】:2021-08-18 07:05:14
【问题描述】:
我使用 jquery.get() 来调用 Spring-Boot 后端,如下所示:
var url = "http://localhost:8080/api/v1/get_holdings?userId=1";
$.get(url, function(payload,status) {
if (status == "success") {
$.each(payload.data, function (key,entry) {
...
})
}
else {...
在 SpringBoot 中,我创建了一个具有嵌入式模型的模型。在这种情况下,模型称为 Holding,嵌入式模型称为 Account,如下所示:
@Entity
@Table(name="holding")
public class Holding {
...
@ManyToOne //Many holdings to One Account
@JoinColumn(name="account_id", nullable=false)
private Account account;
...
//getters and setters...
对数据库的调用正确返回数据。 然后我尝试像这样将它返回给 jquery ajax 调用:
JsonResponse response = new JsonResponse();
List<Holding> holdings = holdingRepo.getUserHoldings(userId);
response.setData(holdings); //response looks correct but browser shows a 500 error. Why?
return response;
JsonResponse 只是我用于所有响应的包装器。我已经使用了很多次,并且在许多其他调用中都可以正常工作:
public class JsonResponse {
private String status = null;
private Object data = null;
//getters and setters...
返回浏览器ok,但是浏览器报500错误。
有两种方法可以让浏览器接受数据。
- 创建一个单独的模型,其中只包含我需要的数据,没有嵌入模型
- 使用 toString() 方法手动创建 json(很麻烦)
我尝试使用 Gson.toJson 和 JSONArray(holdings) 将 Holding 对象转换为 JSON,但这两种方法都失败了。我错过了什么?
【问题讨论】:
-
向我们展示您在后端看到的异常情况。
-
这是问题的一部分。我逐行观察调试器,一直到“返回响应”,没有显示任何错误。
-
1) 您没有在日志中看到任何异常吗? 2)如果在日志中没有看到异常,设置断点捕获所有异常。
-
不,日志中也没有异常。我在“返回响应”行设置了一个断点。我右键单击它并查看了“断点属性”,但没有看到任何名为“捕获所有异常”的内容。接下来我将尝试您的解决方案。谢谢。
-
* 我在“返回响应”行上设置了一个断点* - 不。我的意思是将断点设置为“任何异常”。必须有一个异常被捕获并转换为 HTTP 500 状态。
标签: javascript java jquery ajax spring-boot