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

Spring Controller返回Boolean报HttpMessageNotWritableException问题求助

解决Spring Controller返回Boolean指定text/plain时的转换错误

Spring默认没有提供将java.lang.Boolean直接转换为text/plain类型响应的HttpMessageConverter,因此抛出HttpMessageNotWritableException。以下是几种可行的解决方法:

方法一:直接返回String类型

将返回值改为String,手动把布尔值转成"true"或"false"字符串,完全符合text/plain的响应格式要求,代码最简单直观:

@RequestMapping(value="/test", method=RequestMethod.POST, produces= "text/plain")
public String test() {
    boolean result = true; // 替换为你的业务逻辑计算结果
    return String.valueOf(result);
}

方法二:自定义HttpMessageConverter

如果不想修改Controller的返回类型,可以自定义一个转换器,让Spring支持Boolean到text/plain的转换:

1. 实现自定义转换器

import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class BooleanTextPlainConverter extends AbstractHttpMessageConverter<Boolean> {

    public BooleanTextPlainConverter() {
        super(MediaType.TEXT_PLAIN);
    }

    @Override
    protected boolean supports(Class<?> clazz) {
        return Boolean.class.isAssignableFrom(clazz);
    }

    @Override
    protected Boolean readInternal(Class<? extends Boolean> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        // 若不需要处理text/plain格式的布尔请求,可返回null或抛出异常
        return Boolean.parseBoolean(new String(inputMessage.getBody().readAllBytes(), StandardCharsets.UTF_8));
    }

    @Override
    protected void writeInternal(Boolean aBoolean, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        outputMessage.getBody().write(aBoolean.toString().getBytes(StandardCharsets.UTF_8));
    }
}

2. 注册转换器到Spring容器

在Spring Boot中,通过WebMvcConfigurer配置类注册自定义转换器:

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new BooleanTextPlainConverter());
    }
}

配置完成后,原来的Controller方法无需修改即可正常返回text/plain格式的布尔值。

方法三:使用ResponseEntity手动构建响应

通过ResponseEntity手动指定响应的Content-Type和响应体,灵活控制输出格式:

import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping(value="/test", method=RequestMethod.POST)
public ResponseEntity<String> test() {
    boolean result = false; // 替换为你的业务逻辑计算结果
    return ResponseEntity.ok()
            .contentType(MediaType.TEXT_PLAIN)
            .body(String.valueOf(result));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:05:30