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

获取文本/json内容类型时,SpringAPI应用程序/json不工作

邹举
2023-03-14

我正在查询一个PhraseApp API以获取翻译,并将标题上的内容类型设置为appapplication/json:

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

但是API以附件的形式发送响应,内容类型为text/json;字符集=UTF-8。Spring提出了一个错误:

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class java.lang.String] and content type [text/json;charset=UTF-8]

我得到的答复如下:

{
  "some.key.a": "some translation for a",
  "some.key.b": "some translation for b",
  "some.key.c": "some translation for c"
...
}

我希望将响应分配给一个字符串变量,并在以后解析它。你知道这里出了什么问题吗?非常感谢。

共有2个答案

扶绍辉
2023-03-14

我必须使用以下步骤来让它工作:

>

  • 使用/api/v2/project/{project ectId}/locales/{localeId}/下载

    创建自定义转换器,如下所示:

    公共类PhraseTextJsonConzer扩展MappingJackson2HttpMessageConvert{公共PhraseTextJsonConvert(){setSupport dMediaTypes(initMediaTypes());}

    private List<MediaType> initMediaTypes() {
        return Arrays.asList(new MediaType("text", "json", DEFAULT_CHARSET));
    }
    

    }

    向模板添加转换器:

    protected static RestTemplate createRestTemplateWithConverter() {
            final RestTemplate restTemplate = new RestTemplate();
            final List<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<>();
            httpMessageConverters.add(new MappingJackson2HttpMessageConverter());
            httpMessageConverters.add(new ByteArrayHttpMessageConverter());
            restTemplate.setMessageConverters(httpMessageConverters);
    
            return restTemplate;
        }
    

    后来是一个定制的:

    private void addPhraseTextJsonConverter() {
            restTemplate.getMessageConverters().add(new PhraseTextJsonConverter());
        }
    

    为了能够以地图的形式获得所有的翻译,我必须使用parameteredTypeReference,如下所示:

    protected ResponseEntity<HashMap<String, String>> requestPhraseApp(final HttpEntity<Object> requestEntity, final URI uri) {
            ParameterizedTypeReference<HashMap<String, String>> typeRef = new ParameterizedTypeReference<HashMap<String, String>>() {};
    ...
    return restTemplate.exchange(uri, HttpMethod.GET, requestEntity, typeRef);
    ...
    }
    

    不要忘记初始化请求参数以获取Map中的所有翻译:

    列表urlParameters=new ArrayList

    就这样。

  • 郎意
    2023-03-14

    根据JSON规范,JSON的内容类型应始终为“application/JSON”。

    一种可能的修复方法是编辑请求并设置正确的内容类型。

    幸运的是,我来自PhraseApp团队,可以简单地在我们这边解决这个问题;)

    您现在应该可以将其与原始代码一起使用了!

    如果你需要进一步的帮助,给我一个PN或电子邮件在vincent@phraseapp.com

     类似资料:
    • 我正在Eclipse Enterprise中通过Spring框架而不是Spring Boot编写一个MVC项目。使用Postman,我将向我的方法发送一个json对象: 但是在Eclipse中,我收到了这个错误: 我认为这与我的pom.xml和依赖有关: pom中是否有任何内容。xml我应该更改吗? 其他细节如网络。xml: -servlet.xml

    • 我正在使用JavaSpring框架创建一个时事通讯API。每当我以请求模型的帖子的形式访问API时,我都会得到这个例外组织。springframework。网状物HttpMediaTypeNotSupportedException。 这是我的时事通讯模型 这是我的NewsletterMailerList模型 我给包含类型作为应用程序/json。我是新来做这种事情的。请帮助我为什么会出现这个错误。如

    • 问题内容: 我有一个烧瓶应用程序,具有以下视图: 但是,这仅在请求的内容类型设置为时才有效,否则dict 为None。 我知道请求主体为字符串,但我不想每次客户端忘记设置请求的内容类型时都将其解析为字典。 有没有办法假设每个传入请求的content- type是?我想要的就是始终访问有效的字典,即使客户端忘记将应用程序的内容类型设置为json。 问题答案: 使用并设置为: 从文档中: 默认情况下,

    • 问题内容: 我有一个宁静的服务(发布),它消耗(application / json)并产生(application / json)。此服务的单个参数是带注释的java对象。 我正在使用org.jboss.resteasy.client.ClientRequest将请求发送到服务。但是,我在客户端得到了这个异常和异常: 找不到内容类型应用程序/ json类型的编写器。 这是否意味着我缺少一些库ja

    • 当我从jQuery向Spring RestController发送JSON包时,我有很多错误: 在Spring: 已解决[org.springframework.web.HttpMediaTypeNotSupportedException:内容类型'application/json;字符集=UTF-8'不受支持] 在Chrome: 邮政http://localhost/post415 (匿名)@m