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

Spring Boot接口如何强制将String返回值序列化为标准JSON格式?

问题:Spring Boot接口返回的String未序列化为标准JSON格式

我编写了如下Spring Boot接口代码:

@RestController
@RequestMapping("api/v1/student")
public class StudentController {

    @GetMapping
    public ResponseEntity<String> serviceOk() {
        return new ResponseEntity<>("service OK", HttpStatus.OK);
    }
}

当前接口返回的内容是:

service OK 

而非符合JSON规范的格式:

"service OK"

带双引号的"service OK"是有效的JSON格式,无引号的纯文本则不是。请问如何改造Web服务,强制将简单String类型也序列化为JSON格式?


解决方案1:用包装类封装String

这是最稳妥的常规方案,通过把String放到对象或集合中,让Jackson默认的序列化机制生成标准JSON:

方式1:用Map临时包装

@RestController
@RequestMapping("api/v1/student")
public class StudentController {

    @GetMapping
    public ResponseEntity<Map<String, String>> serviceOk() {
        Map<String, String> response = new HashMap<>();
        response.put("message", "service OK");
        return new ResponseEntity<>(response, HttpStatus.OK);
    }
}

返回结果:{"message":"service OK"}

方式2:自定义响应类

如果需要统一接口返回格式,建议定义通用响应类:

// 通用响应类
public class ApiResponse<T> {
    private T data;

    public ApiResponse(T data) {
        this.data = data;
    }

    // getter方法
    public T getData() {
        return data;
    }
}

// 控制器中使用
@RestController
@RequestMapping("api/v1/student")
public class StudentController {

    @GetMapping
    public ResponseEntity<ApiResponse<String>> serviceOk() {
        return new ResponseEntity<>(new ApiResponse<>("service OK"), HttpStatus.OK);
    }
}

返回结果:{"data":"service OK"}


解决方案2:修改消息转换器,强制用Jackson序列化String

Spring默认会用StringHttpMessageConverter处理String类型的返回值,跳过Jackson序列化。我们可以移除这个转换器,让Jackson处理所有类型:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 移除默认的String转换器
        converters.removeIf(converter -> converter instanceof StringHttpMessageConverter);
        // 添加Jackson转换器
        MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
        converters.add(jacksonConverter);
    }
}

修改后,原接口会直接返回"service OK",符合JSON规范。注意:这个配置会全局生效,所有String类型的返回都会被序列化为带双引号的JSON字符串。


解决方案3:手动构造JSON格式字符串

这种方式适合简单场景,直接返回带双引号的字符串,并指定Content-Type为application/json:

@RestController
@RequestMapping("api/v1/student")
public class StudentController {

    @GetMapping
    public ResponseEntity<String> serviceOk() {
        // 手动添加双引号,注意转义字符串内部的双引号(如果有的话)
        String jsonResponse = "\"service OK\"";
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_JSON)
                .body(jsonResponse);
    }
}

返回结果就是"service OK",符合JSON规范。


内容的提问来源于stack exchange,提问作者work-in-progress

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:33