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

Spring Boot中Swagger响应Schema配置:指定JSON结构而非字符串

解决Swagger显示String类型响应而非JSON结构的问题

我之前也碰到过一模一样的情况——用@RestController返回JSON格式的字符串,接口跑起来完全正常,但Swagger里就是只显示响应类型为string,看不到实际的JSON结构。这里有几个靠谱的解决办法:

方法一:修改方法返回类型为实际的DTO类

这是最规范的做法,既然你的服务返回的是JSON结构,直接把方法的返回类型从String改成对应的DTO类就行。@RestController会自动帮你完成Jackson序列化,同时Swagger会自动识别DTO的结构并展示出来。

比如假设你的MyService.getMyData()实际对应的数据结构是MyDataDto,修改后的代码如下:

@ApiOperation(value = "....", tags = {"Alarms"})
@PostMapping(value = "")
public MyDataDto getValuesByJsonString(@RequestBody Request request) {
    // 如果原Service返回的是String,可先反序列化为MyDataDto;或者直接修改Service返回DTO对象
    return myService.getMyData(request);
}

这样Swagger就会自动解析MyDataDto的字段,展示出完整的JSON响应结构了。

方法二:通过Swagger注解强制指定实际响应类型

如果因为遗留代码依赖等原因没法修改方法返回类型,可以通过Swagger的@ApiResponse注解明确指定响应对应的DTO类,强制让Swagger展示该类的结构。

你需要在@ApiResponses里补充200状态码的响应配置,把response参数设为你的目标DTO类:

@ApiResponses(value = {
    @ApiResponse(code = 200, message = "Success", response = MyDataDto.class),
    @ApiResponse(code = 400, message = "Bad request", response = ErrorDto.class),
    @ApiResponse(code = 404, message = "Location id not found", response = ErrorDto.class),
    @ApiResponse(code = 500, message = "Internal error")
})
@ApiOperation(value = "....", tags = {"Alarms"})
@PostMapping(value = "")
public String getValuesByJsonString(@RequestBody Request request) {
    return myService.getMyData(request);
}

这样即使方法返回的是String,Swagger也会根据你指定的MyDataDto来展示响应的JSON结构。

小细节提醒

另外注意下你代码里的小问题:构造函数的参数名MyService和成员变量myService大小写不一致,虽然不影响运行,但规范起见最好统一成小写开头的myService,避免混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:07:55