我有2个Spring引导REST服务,它们作为生产者和消费者进行交互。一个是JSON内容的生产者,另一个是消费者。
在消费者服务中,我使用Spring的RestTemplate调用生产者的endpoint并获得结果。
控制器POSTendpoint的生产者相关代码如下:
@RequestMapping(value = "/cars", method = RequestMethod.POST)
public ResponseEntity<Cars> getCars(/* methods params */) {
// some code here
HttpHeaders respHeader = new HttpHeaders();
respHeader.set("Content-Type", "application/json");
ResponseEntity<Cars> resp = new ResponseEntity<Cars>(cars, respHeader, HttpStatus.OK);
return resp;
}
上述生产商代码中的注意事项:
但是消费者以XML而不是JSON获取响应。Jackson在班级小路上。
如何解释返回XML而不是JSON,即使内容类型在响应标头中显式设置为“应用程序/json”?
假设响应头没有任何效果,那么默认值是什么?是XML而不是JSON吗?
您可以在Spring的ContentTypeServer atingMessageConverter
中设置断点并调试以查看已解析的消息转换器以获取响应。
web客户端和服务器之间确定响应内容类型的概念和过程称为内容协商。
自Spring MVC以来,注册的WebMVCConfiguer和HttpMessageConverters负责响应的表示和内容类型。
在SpringBoot中,这些是自动配置的。
对于任何@RestController
或具有@响应体
的控制器endpoint,响应的默认内容类型是XML,如果Jackson在类路径中可用并自动配置成功,则默认内容类型应该是JSON。
另请参见:
您可以通过自定义Spring的WebMvcConfigrer
来配置任何响应的默认内容类型。
为此,请将以下代码添加到带有配置注释的给定配置类中:
@Bean
public WebMvcConfigurer customConfigurer() {
return new WebMvcConfigurer() {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
};
}
null 当我创建正文部分时,我是否应该显式地设置top mime消息的内容类型,然后设置每个正文部分? 如果是,在上面的例子中它们应该是什么? 对于html建议,对于附件建议,对于内联建议。我正在使用所有这些,那么对于完整的消息和不同的主体部分应该是什么内容类型? 通过上面的代码,我得到了正确的html文本,纯文本,内联图像和附件在正确的地方与James集成的ThunderBird。 因此,我不
我实现了一个API,它将根据客户的请求返回JSON和XML(即接受请求中的头)。它像预期的那样工作。 这里的问题是:即使用户发送接受标头,在一些特殊情况下(即业务逻辑),我们也需要动态发送响应内容类型。我试图使用HttpHeaders实现它,但它不起作用。 我将HTTP状态设置为200,但响应为错误,即, 如何解决这个问题?
我得到这个错误消息: 无法写入JSON: 未找到用于java.io.FileDescriptor类的序列化程序,也未发现用于创建BeanSerializer的属性 (为了避免异常,禁用SerializationFeature.fail_on_empty_beans)) (通过引用链: org.springframework.core.io.filesystemResource[\“outputSt
当我尝试向某个endpoint发送sparql查询时,例如: 我明白了 这不是唯一一个我无法向其发送查询的endpoint, 我应该怎么做才能在其他内容类型中获得结果?我试着用谷歌搜索它,但我发现如果我将查询发送到错误的html(不是sparqlendpoint),就会发生这种情况,但是http://data.open.ac.uk/sparql是一个好的endpoint,我通过python向它发送
我想强制内容类型为application/json,但我有一个模式“no cors”,实际上内容类型的返回是:text/plain;charset=UTF-8传递头时是一样的,所以我不知道怎么做。 我已经尝试过使用fetch或Axios,URL在HTTP中,我在本地工作,所以可能是问题所在?我试过邮递员,效果很好。 所以,我想要的内容类型是:application/json,而不是内容类型:tex
问题内容: 使用JavaFX Scene Builder时遇到以下问题… 鉴于: 文件fxml,包含描述锚定窗格(由Scene Builder形成的fxml); 未为“锚定窗格”指定控制器类。 使用FXMLLoader将此fxml加载到Java应用程序中。 需要: 下载锚定窗格后,将值设置为Controller Class。 必须使用不同的处理程序加载相同的fxml。 问题: 是否可能?如果可以,