org.springframework.http.MediaType 中的标记字符“/”无效

Posted

技术标签:

【中文标题】org.springframework.http.MediaType 中的标记字符“/”无效【英文标题】:Invalid token character '/' in org.springframework.http.MediaType 【发布时间】:2019-10-20 02:45:03 【问题描述】:

我有一个基本的 SpringBoot 2.1.5.RELEASE 应用程序。使用 Spring Initializer、JPA、嵌入式 Tomcat;

我想创建这个 MediaType

MediaType mediaType = new MediaType("application/vnd.bonanza+xml");

在 PostMan 中可以正常工作,但在 RestTemplate 中不行

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:816)
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
    at com.ideefecloud.IdeefeCloudApplication.main(IdeefeCloudApplication.java:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.IllegalArgumentException: Invalid token character '/' in token "application/vnd.bonanza+xml"

【问题讨论】:

【参考方案1】:

您可能使用了错误的constructor。此构造函数仅将 type 作为 arguments 并将 treats 子类型作为 *

变化:

MediaType mediaType = new MediaType("application/vnd.bonanza+xml");

收件人:

MediaType mediaType = MediaType.valueOf("application/vnd.bonanza+xml");

valueOf

public static MediaType valueOf(String value)

使用此方法将给定的 String 值解析为 MediaType 对象 遵循“valueOf”命名约定的名称(由 转换服务。

参数

value - 要解析的字符串

投掷

InvalidMediaTypeException - 如果无法解析媒体类型值

或者:

MediaType mediaType = new MediaType("application", "vnd.bonanza+xml");

MediaType(String type, String subtype)

为给定的主要类型和子类型创建一个新的 MediaType。

或者:

MediaType mediaType = MediaType.yourType;

【讨论】:

【参考方案2】:

一个媒体类型由一个type和一个subtype组成。要创建MediaType 的实例,您可以在constructor 中拆分类型和子类型,如下所示:

MediaType mediaType = new MediaType("application", "vnd.bonanza+xml");

或者您可以使用 valueOf() 工厂方法代替:

MediaType mediaType = MediaType.valueOf("application/vnd.bonanza+xml");

【讨论】:

以上是关于org.springframework.http.MediaType 中的标记字符“/”无效的主要内容,如果未能解决你的问题,请参考以下文章

无法序列化“org.springframework.http.ResponseEntity”HazelcastCache

org.springframework.http.converter.HttpMessageConversionException: T

org.springframework.http.MediaType 中的标记字符“/”无效

Not found org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

Spring 一对多关系抛出异常:org.springframework.http.converter.HttpMessageNotWritableException

org.springframework.http.converter.HttpMessageNotWritableException 没有找到类型的返回值的转换器:类