org.springframework.http.MediaType中的无效令牌字符'/'

时间:2019-06-04 14:36:57

标签: rest spring-boot resttemplate restful-url media-type

我有一个基本的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"

2 个答案:

答案 0 :(得分:2)

您可能使用了错误的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'命名约定的名称(由   ConversionService。

     

参数

     

value-要解析的字符串

     

投掷

     

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

OR:

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

MediaType(String type, String subtype)

     

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

OR:

MediaType mediaType = MediaType.yourType;

答案 1 :(得分:1)

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

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

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

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