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

Quarkus实现JSON格式组配置文件上传下载端点开发需求

Quarkus 组配置文件上传与下载端点实现

下载端点实现

该端点负责从数据库读取组配置JSON对象,转换为config.json文件返回给用户。

完整代码

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.inject.Inject;

@Path("/group/config")
public class GroupConfigResource {

    @Inject
    GroupConfigRepository configRepository; // 自定义数据库操作Bean
    @Inject
    ObjectMapper objectMapper;

    @GET
    @Path("{groupId}")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response downloadGroupConfig(@PathParam("groupId") String groupId) {
        // 从数据库获取组配置
        Object groupConfig = configRepository.getConfigByGroupId(groupId);
        if (groupConfig == null) {
            return Response.status(Response.Status.NOT_FOUND)
                    .entity("Group config not found")
                    .build();
        }

        try {
            // 将JSON对象序列化为字符串
            String configJson = objectMapper.writeValueAsString(groupConfig);
            // 设置响应头触发文件下载
            return Response.ok(configJson)
                    .header("Content-Disposition", "attachment; filename=\"config.json\"")
                    .type(MediaType.APPLICATION_JSON)
                    .build();
        } catch (Exception e) {
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                    .entity("Failed to generate config file")
                    .build();
        }
    }
}

关键说明

  • 响应头设置:通过Content-Disposition头指定文件名为config.json并标记为附件,确保浏览器触发下载行为
  • JSON序列化:借助ObjectMapper将数据库存储的JSON对象转为字符串
  • 异常处理:处理配置不存在、序列化失败等场景,返回对应HTTP状态码

上传端点实现

该端点负责接收用户上传的config.json文件,转换为JSON对象后存储到数据库。

完整代码

import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.inject.Inject;
import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;

import java.io.IOException;
import java.util.List;
import java.util.Map;

@Path("/group/config")
public class GroupConfigResource {

    @Inject
    GroupConfigRepository configRepository;
    @Inject
    ObjectMapper objectMapper;

    @POST
    @Path("{groupId}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response uploadConfigFile(@MultipartForm MultipartFormDataInput input, @PathParam("groupId") String groupId) {
        try {
            // 解析上传的表单数据,获取文件部分
            Map<String, List<InputPart>> formData = input.getFormDataMap();
            InputPart filePart = formData.get("file").get(0);

            // 读取文件内容为字符串
            String configContent = filePart.getBodyAsString();
            // 将字符串反序列化为JSON对象(可替换为具体POJO类提升类型安全性)
            Object configObject = objectMapper.readValue(configContent, Object.class);

            // 保存到数据库
            configRepository.saveConfigByGroupId(groupId, configObject);

            return Response.ok()
                    .entity("{\"message\": \"Config uploaded successfully\"}")
                    .build();
        } catch (IOException e) {
            return Response.status(Response.Status.BAD_REQUEST)
                    .entity("{\"error\": \"Invalid JSON file\"}")
                    .build();
        } catch (Exception e) {
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                    .entity("{\"error\": \"Failed to upload config\"}")
                    .build();
        }
    }
}

关键说明

  • 文件接收:使用MultipartFormDataInput处理multipart格式的文件上传,表单字段名需为file
  • JSON反序列化:将文件内容转为字符串后,通过ObjectMapper解析为JSON对象(建议定义GroupConfig POJO类替代Object)
  • 异常处理:捕获JSON解析错误、数据库存储失败等异常,返回对应的错误信息和状态码

必要依赖

需在pom.xml中添加以下扩展支持文件上传和JSON处理:

<!-- Multipart文件上传支持 -->
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-resteasy-multipart</artifactId>
</dependency>

<!-- Jackson JSON处理支持 -->
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:20:38