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

如何在Spring Boot POST接口中获取Syncfusion Angular日历请求负载的JSON数据

解决方案

前置配置

首先确认Spring Boot项目已经开启multipart请求支持,Spring Boot 2.x+版本默认开启,无需额外配置,若手动关闭过可在application.properties中添加如下配置:

spring.servlet.multipart.enabled=true

实现代码

你可以选择以下两种方案中的任意一种实现JSON提取:

方案1:直接解析请求体(快速实现)

适合场景:仅需处理Syncfusion Calendar的固定batch请求格式,实现成本低

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.stream.Collectors;
import java.nio.charset.StandardCharsets;

@RequestMapping(value = "/appointment/{batch}" , method = RequestMethod.POST, consumes = "multipart/mixed")
public ResponseEntity<?> addAppointment(@PathVariable Map batch,HttpServletRequest request) throws IOException {
    // 读取完整请求体内容
    String requestBody = request.getReader()
            .lines()
            .collect(Collectors.joining(System.lineSeparator()));
    
    // 提取JSON字符串:匹配第一个{到最后一个}的区间
    int jsonStartIndex = requestBody.indexOf('{');
    int jsonEndIndex = requestBody.lastIndexOf('}');
    if (jsonStartIndex < 0 || jsonEndIndex < 0) {
        return ResponseEntity.badRequest().body("无效请求,未找到目标JSON数据");
    }
    String jsonContent = requestBody.substring(jsonStartIndex, jsonEndIndex + 1);
    
    // 转换为自定义实体类(AppointmentDTO字段需和JSON字段一一对应)
    ObjectMapper objectMapper = new ObjectMapper();
    AppointmentDTO appointment = objectMapper.readValue(jsonContent, AppointmentDTO.class);
    
    // 后续业务逻辑处理...
    return ResponseEntity.ok("预约添加成功");
}

// 自定义预约实体类示例
class AppointmentDTO {
    private String Subject;
    private String StartTime;
    private String EndTime;
    private Boolean IsAllDay;
    private String StartTimezone;
    private String EndTimezone;
    private String RecurrenceRule;
    private Integer Id;
    // 省略getter、setter方法
}

方案2:标准Multipart解析(规范可扩展)

适合场景:后续可能兼容其他batch请求,遵循HTTP multipart解析规范

import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.Part;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.charset.StandardCharsets;

@RequestMapping(value = "/appointment/{batch}" , method = RequestMethod.POST, consumes = "multipart/mixed")
public ResponseEntity<?> addAppointment(@PathVariable Map batch,HttpServletRequest request) throws IOException {
    if (!(request instanceof MultipartHttpServletRequest)) {
        return ResponseEntity.badRequest().body("请求格式错误");
    }
    MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
    AppointmentDTO appointment = null;
    ObjectMapper objectMapper = new ObjectMapper();
    
    // 遍历所有multipart分段
    for (Part part : multiRequest.getParts()) {
        String partContent = new String(part.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
        int jsonStartIndex = partContent.indexOf('{');
        int jsonEndIndex = partContent.lastIndexOf('}');
        if (jsonStartIndex >= 0 && jsonEndIndex >= 0) {
            String jsonContent = partContent.substring(jsonStartIndex, jsonEndIndex + 1);
            appointment = objectMapper.readValue(jsonContent, AppointmentDTO.class);
            break;
        }
    }
    
    if (appointment == null) {
        return ResponseEntity.badRequest().body("未提取到有效预约数据");
    }
    
    // 后续业务逻辑处理...
    return ResponseEntity.ok("预约添加成功");
}

注意事项

  • 上述两种方案对于Syncfusion Calendar的固定batch请求格式均可用,无需修改前端配置
  • 若JSON中存在嵌套的{}结构,可替换为正则表达式匹配合法JSON字符串,普通场景下直接提取首尾{}的逻辑足够稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:24:06