我正在试用新的Spring 4.0@RestController,以从控制器返回一个简单的文本响应:
@RestController
@RequestMapping(value = "/heartbeat")
public class HeartbeatController {
private static final Logger logger = LoggerFactory.getLogger(HeartbeatController.class);
@RequestMapping
public String heartbeat() {
logger.info("Received heartbeat!");
return "I'm Alive!";
}
@RequestMapping(value = "/test", produces = MediaType.TEXT_PLAIN_VALUE)
public String heartbeat2() {
logger.info("Received heartbeat!");
return "I'm Alive!";
}
}
当我访问/心跳时,我返回:
"I'm Alive!"
结果包括双引号,这是我没有想到的。
当我访问/heartbeat/test时,我会得到一个空响应,但我希望我还活着!文本
使现代化
卷曲-ihttp://myserver.com/rest/heartbeat
HTTP/1.1 200 OK内容类型:application/json;charset=UTF-8服务器:开发/1.0日期:2013年12月17日星期二18:59:08 GMT缓存控制:无缓存过期:1990年1月1日星期五00:00:00 GMT内容长度:12
“我还活着!”
curl-i-H“接受:应用程序/json”http://myserver.com/rest/heartbeatHTTP/1.1 200 OK内容类型:application/json;charset=UTF-8服务器:开发/1.0日期:2013年12月17日星期二19:01:12 GMT缓存控制:无缓存过期:1990年1月1日星期五00:00:00 GMT内容长度:12
“我还活着!”
curl-ihttp://myserver.com/rest/heartbeat/test
HTTP/1.1 406不可接受服务器:开发/1.0日期:2013年12月17日星期二19:00:13 GMT缓存控制:无缓存过期:1990年1月1日星期五00:00:00 GMT内容长度:0
curl-i-H"接受:文本/普通"http://myserver.com/rest/heartbeat/test
HTTP/1.1 406不可接受服务器:开发/1.0日期:星期二,17 Dec2013 19:02:06GMT缓存控制:无缓存过期:星期五,01 Jan1990 00:00:00GMT内容长度: 0
@RestController
在Controller类上结合了@Controller
和@响应体
,如留档中所述。
当您使用@ResponseBody
注释方法/a控制器时,Spring会使用Accept
HTTP请求头和在注释上生成
属性来帮助您进行内容协商。
在您的情况下:
application/json
响应,因为您的HTTP客户端可能会请求该内容类型,而Spring进行了内容协商
更新:我使用了完全相同的卷曲请求,但没有得到相同的结果。也许过滤器或HTTP代理缓存正在修改HTTP标头?
默认格式为文本/纯文本:
➜ curl -v http://localhost:8080/heartbeat
> GET /heartbeat HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Content-Type: text/plain;charset=ISO-8859-1
< Content-Length: 13
< Date: Wed, 18 Dec 2013 13:34:12 GMT
<
Hello, World!%
并使用生成文本/普通属性:
➜ curl -H "Accept: text/plain" -v http://localhost:8080/heartbeat/test
> GET /heartbeat/test HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8080
> Accept: text/plain
>
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Content-Type: text/plain
< Content-Length: 13
< Date: Wed, 18 Dec 2013 13:39:07 GMT
<
Hello, World!%
这个示例应用程序做同样的事情,并获得良好的结果。
@RestController是一种方便的注释,这意味着您不再需要在方法上指定@ResponseBy注释。
但这将意味着您的响应类型将被默认为JSON,因此将被正确地用引号括起来。
我发现我的网络配置的configureMessageConverters中缺少StringHttpMessageConverter。我正在配置消息转换器以控制Jackson ObjectMapper。
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setPrettyPrint(SystemProperty.environment.value() == Development);
mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper());
converters.add(mappingJackson2HttpMessageConverter);
converters.add(new StringHttpMessageConverter()); // THIS WAS MISSING
}
我想在Spring Boot Controller方法中返回一条没有@ResponseBody注释的纯文本消息。 通常,当我返回一个字符串时,会出现一个错误。(实际上,它会查找html文件。) 当我使用此代码时,这将返回一个错误 错误解决模板[这是一个纯文本],模板可能不存在或可能无法访问任何配置的模板解析程序org.thymeleaf.exceptions.TemplateInputExc001
我试图测试我的RestController代码(Spring Boot项目),但我总是得到404。以下是我目前掌握的情况: } } 结果总是这样: 我做错了什么?我已经尝试过直接在setUp方法中用标准设置()初始化mockmvc,我还使用了@SpringBootTest和@AutoConfigreMockMvc相结合。 有人有什么有用的提示吗?我使用spring boot 2.1.4。 谢谢
我有一个spring boot webapp,我在其中定义了REST API。我将Spring Security性用于REST API安全性。 我已经用RESTController注释了我的控制器类。我最近更新了spring boot,mvc和安全性到最新版本。 我现在看到,在我的负面情况下,在更新之前,它返回json错误响应,但现在在更新之后,它返回html错误响应。 在更新之前,它给出了以下错
使用@RepositoryRestResource生成路径并为 REST API 注入所有必要的 HATEOAS 链接,但是当我使用控制器从存储库返回相同的结果时,JSON 结构是不同的,并且没有 HATEOAS 链接。 我如何返回从控制器获得与RepositoryRestResource生成的路径相同的JSON结构? REST存储库: REST控制器:
我有一个Spring MVC控制器,方法如下: 它位于一个开始如下所示的控制器内部: 我使用的是Spring WebMVC 4.1.3和Jackson 2.4.3。我尝试在RequestMapping中添加一个“produces”属性,表示它应该返回JSON。在本例中,发回的Content-Type属性是“application/json”,但仍然没有引用测试字符串。 我可以通过调用JSON库将J
我正在构建我的第一个Spring Boot应用程序。但是我不能正确地得到我的requestMapping控制器的回答。 这是我的主要课程: 这是我的RestController: 如果我看一下日志,我可以看到“/hi”映射: 但是当我访问:http:localhost:8080/hi时,我看到了一个空白页面,我期望看到“Hello World”文本。 为什么我得到一个空白页面? ---编辑----