gpt4 book ai didi

spring - 如何在 Spring Controller 中返回纯文本?

转载 作者:行者123 更新时间:2023-12-03 17:42:11 35 4
gpt4 key购买 nike

我想返回一个简单的纯文本字符串,如下所示:

@RestController 
@RequestMapping("/test")
public class TestController {
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/my", method = RequestMethod.GET, produces="text/plain")
public String test() {
return "OK";
}

问题:我还有一个全局 ContentNegotiation 过滤器,如下所示:
@Configuration
public class ContentNegotiationAdapter extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false)
.favorParameter(true)
.ignoreAcceptHeader(true)
.useJaf(false)
.defaultContentType(MediaType.APPLICATION_XML);
}

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

结果:每当我访问 Spring Controller 时,都会收到错误消息:
Could not find acceptable representation
问题:如何强制 Controller 返回纯文本,即使在内容协商中只配置了 XML(我必须保留)?

最佳答案

如果删除 produces="text/plain"从映射中,它返回纯文本,但标题设置为 "application/xml" .这可能是不可取的。
我使用最新版本的 Spring Boot 进行了测试。

如果你使用的是Spring >= 4.1.2的版本,可以尝试使用defaultContentTypeStrategy而不是 defaultContentType , 在标题中设置正确的内容类型:

   configurer.favorPathExtension(false)
.favorParameter(true)
.ignoreAcceptHeader(true)
.useJaf(false)
.defaultContentTypeStrategy(new ContentNegotiationStrategy() {
@Override
public List<MediaType> resolveMediaTypes(NativeWebRequest nativeWebRequest) throws
HttpMediaTypeNotAcceptableException {
System.out.println("Description:"+nativeWebRequest.getDescription(false));
if (nativeWebRequest.getDescription(false).endsWith("/test/my")) {
return Collections.singletonList(MediaType.TEXT_PLAIN);
}
else {
return Collections.singletonList(MediaType.APPLICATION_XML);
}
}
})
//.defaultContentType(MediaType.APPLICATION_XML)
;

关于spring - 如何在 Spring Controller 中返回纯文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33415036/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com