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对象(建议定义GroupConfigPOJO类替代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
相关产品推荐
相关产品推荐

