You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot订单详情模态框无数据显示排查求助

我来帮你一步步排查这个问题——控制台没报错但模态框是空的,大概率是数据传递或者序列化环节出了问题,我们一个个来捋:

1. 最可能的元凶:Spring对Optional的序列化包装

你的控制器返回的是Optional<Ordre>,Spring默认会把Optional序列化成一个带present和value字段的JSON对象,而不是直接返回订单实体。比如实际返回的JSON结构是这样的:

{
  "present": true,
  "value": {
    "num_ord": "ORD001",
    "dte_ord": "2024-05-20",
    ...
  }
}

这时候你前端用ordre.num_ord取值自然拿不到,因为真实的订单数据藏在value属性里。

解决办法:
修改控制器,直接返回Ordre对象(或用ResponseEntity处理找不到的情况),避免返回Optional:

@GetMapping("/view")
@ResponseBody
public Ordre view(String id) {
    // 找不到订单时返回null,前端可以后续处理空值逻辑
    return ordreRepository.findById(id).orElse(null);
}

更规范的写法(推荐):用ResponseEntity明确处理不同状态

@GetMapping("/view")
public ResponseEntity<Ordre> view(String id) {
    return ordreRepository.findById(id)
            .map(ResponseEntity::ok)  // 找到订单返回200+实体
            .orElse(ResponseEntity.notFound().build()); // 找不到返回404
}

2. 异步请求的时机问题

你现在的代码是先发起异步请求,立刻就显示模态框——这时候数据还没返回,模态框会先展示空内容,虽然理论上数据回来后会填充,但如果网络慢或者回调出问题,就会一直是空的。

优化写法:把模态框的显示放到$.get的回调里,确保数据加载完成后再展示:

$('.view').on('click', function(e) {
    e.preventDefault();
    var href2 = $(this).attr('href2');
    
    // 先打印URL确认是否正确
    console.log('请求的URL:', href2);
    
    $.get(href2, function(ordre, status) {
        // 打印返回的数据结构,方便排查
        console.log('返回的订单数据:', ordre);
        
        // 兼容如果还是返回Optional的情况,先取value
        var orderData = ordre.value || ordre;
        
        // 填充模态框数据
        $('#Modalview #num_ord').val(orderData.num_ord);
        $('#Modalview #dte_ord').val(orderData.dte_ord);
        $('#Modalview #dir_ord').val(orderData.dir_ord);
        $('#Modalview #ref_ord').val(orderData.ref_ord);
        $('#Modalview #pap_ord').val(orderData.pap_ord);
        $('#Modalview #boss_ord').val(orderData.boss_ord);
        $('#Modalview #suj_ord').val(orderData.suj_ord);
        
        // 数据填充完成后再显示模态框
        $('#Modalview').modal();
    })
    // 新增错误回调,排查请求失败的隐藏问题
    .fail(function(xhr, status, error) {
        console.error('请求出错:', status, error);
        console.error('响应详情:', xhr.responseText);
    });
});

之前控制台没报错可能是因为没监听请求失败的情况,加上.fail后能帮你发现404、500这类隐藏错误。

3. 检查请求URL是否有效

在click事件里打印href2的值,确认这个URL是否正确指向你的/view接口——比如有没有漏掉项目上下文路径,或者参数id没带上?正确的URL应该类似http://localhost:8080/your-app/view?id=ORD001。

4. 检查Ordre实体类的序列化配置

确保你的Ordre类的所有字段都有对应的getter方法,Spring需要通过getter来把字段序列化成JSON。比如:

public class Ordre {
    private String num_ord;
    private LocalDate dte_ord;
    // ...其他字段
    
    // 必须有getter才能被Spring序列化
    public String getNum_ord() {
        return num_ord;
    }
    
    public void setNum_ord(String num_ord) {
        this.num_ord = num_ord;
    }
    
    // 其他字段的getter/setter同理
}

如果没有getter,JSON里不会包含对应的字段,前端自然拿不到值。

5. 确认模态框元素选择器无误

检查JS里的选择器(比如#num_ord)和模态框里的元素id是否完全一致,有没有拼写错误的情况。

按上面的步骤逐一排查,应该就能解决模态框空内容的问题了。

内容的提问来源于stack exchange,提问作者mimo2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:28:12