我正在处理一个API的一部分,它需要调用另一个外部API来检索它的一个函数的数据。调用返回HTTP 500错误,描述为“不支持内容类型‘应用程序/八位字节流’。”该调用应返回“application/json”类型。"
我发现这是因为接收到的响应没有在其头中显式指定内容类型,即使其内容的格式为JSON,所以我的API默认假定它是一个八位字节流。
问题是,我不知道如何适应这种情况。即使另一个API没有指定内容类型,我如何让我的API将它从另一个API接收的数据视为application/json?将另一个API更改为在其响应中包含contenttype属性是不可行的。
代码:
API类:
@RestController
@RequestMapping(path={Constants.API_DISPATCH_PROFILE_CONTEXT_PATH},produces = {MediaType.APPLICATION_JSON_VALUE})
public class GetProfileApi {
@Autowired
private GetProfile GetProfile;
@GetMapping(path = {"/{id}"})
public Mono<GetProfileResponse> getProfile(@Valid @PathVariable String id){
return GetProfile.getDispatchProfile(id);
}
调用外部API的服务:
@Autowired
private RestClient restClient;
@Value("${dispatch.api.get_profile}")
private String getDispatchProfileUrl;
@Override
public Mono<GetProfileResponse> getDispatchProfile(String id) {
return Mono.just(id)
.flatMap(aLong -> {
MultiValueMap<String, String> headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
return restClient.get(getDispatchProfileUrl, headers);
}).flatMap(clientResponse -> {
HttpStatus status = clientResponse.statusCode();
log.info("HTTP Status : {}", status.value());
return clientResponse.bodyToMono(GetProfileClientResponse.class);
// the code does not get past the above line before returning the error
}).map(GetProfileClientResponse -> {
log.debug("Response : {}",GetProfileClientResponse);
String id = GetProfileClientResponse.getId();
log.info("SubscriberResponse Code : {}",id);
return GetProfileResponse.builder()
// builder call to be completed later
.build();
});
}
RestClient的GET方法:
public <T> Mono<ClientResponse> get(String baseURL, MultiValueMap<String,String> headers){
log.info("Executing REST GET method for URL : {}",baseURL);
WebClient client = WebClient.builder()
.baseUrl(baseURL)
.defaultHeaders(httpHeaders -> httpHeaders.addAll(headers))
.build();
return client.get()
.exchange();
}
我尝试过的一个解决方案是将API的@RequestMapping
中的products={MediaType.APPLICATION\u JSON\u VALUE}
设置为products={MediaType.APPLICATION\u OCTET\u STREAM\u VALUE}
,但这导致了另一个错误,HTTP 406不可接受。我发现服务器无法将请求的表示形式中的数据提供给客户机,但我不知道如何更正它。
即使响应没有内容类型,我如何才能成功地将其作为JSON处理?
希望我的问题框架设计得足够好,我有点被推到这一步,我仍在试图弄清楚到底发生了什么。
你使用jackson库还是jaxb库来编组/解组?
尝试用@XmlRootElement注释Mono实体类,看看会发生什么。
我有一个第三方服务,它用文件向我的Django应用程序发出POST请求。要成功上传到Django应用程序,请求必须具有“多部分/表单数据”内容类型,但在我的案例和请求中,内容类型是“八位流”。文件总是空的。我怎么能在Django中接收八位流内容类型的文件?
我正试图通过React前端向Spring后端发送一个API请求。当我发送请求时,我收到以下错误: 然而,当我使用邮递员设置请求时,它会顺利通过。我想在React端如何设置FormData可能会有问题。然而,我几乎没有运气弄明白这一点。 我的API应该接收一个对象,该对象包含关于我提交的数据以及与提交相关的图像。在我的Postman请求中,我创建了一个表单数据,其中包含一个JSON文件,该文件包含所
我正在Eclipse Enterprise中通过Spring框架而不是Spring Boot编写一个MVC项目。使用Postman,我将向我的方法发送一个json对象: 但是在Eclipse中,我收到了这个错误: 我认为这与我的pom.xml和依赖有关: pom中是否有任何内容。xml我应该更改吗? 其他细节如网络。xml: -servlet.xml
我在一个spring MVC控制器中有一个简单的REST方法,如下所示,它有一个签名: @RequestMapping(value=“/person/{personId}”,method=RequestMethod.Get)public@ResponseBody对象getPerson(@PathVariable(“personId”)String personId){ ...} 输出为类型,因为从
当我在localhost:8080/api/users上做一个POST请求来创建一个新用户时,我会得到以下错误: 是请求的主体,选择JSON(应用程序/JSON)。即使我删除角色并将其保持为空,它也会给出相同的错误。 标题的内容类型也是application/json。 这是我的控制器: UserService中的createUser函数: 这是我的用户类:
我正在使用JavaSpring框架创建一个时事通讯API。每当我以请求模型的帖子的形式访问API时,我都会得到这个例外组织。springframework。网状物HttpMediaTypeNotSupportedException。 这是我的时事通讯模型 这是我的NewsletterMailerList模型 我给包含类型作为应用程序/json。我是新来做这种事情的。请帮助我为什么会出现这个错误。如