当前位置: 首页 > 知识库问答 >
问题:

Java STS返回“内容类型”应用程序/八位字节流“不受支持”的API调用

蔡修远
2023-03-14

我正在处理一个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处理?

希望我的问题框架设计得足够好,我有点被推到这一步,我仍在试图弄清楚到底发生了什么。

共有1个答案

尉迟跃
2023-03-14

你使用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。我是新来做这种事情的。请帮助我为什么会出现这个错误。如