编程语言
首页 > 编程语言> > Spring Boot将text / javascript序列化为JSON

Spring Boot将text / javascript序列化为JSON

作者:互联网

我创建了以下Kotlin数据类:

@JsonInclude(JsonInclude.Include.NON_NULL)
public data class ITunesArtist(val artistName: String, 
    val artistId: Long, val artistLinkUrl: URL)

(数据类是Kotlin类,它在编译时自动生成equals,hashcode,toString等 – 节省时间).

现在我尝试使用Spring RestTemplate填充它:

@Test
fun loadArtist()
{
    val restTemplate = RestTemplate()
    val artist = restTemplate.getForObject(
            "https://itunes.apple.com/search?term=howlin+wolf&entity=allArtist&limit=1", ITunesQueryResults::class.java);
    println("Got artist: $artist")
}

它失败了:

Could not extract response: no suitable HttpMessageConverter found for response type 
[class vampr.api.service.authorization.facebook.ITunesArtist] 
and content type [text/javascript;charset=utf-8]

足够公平–JSON对象映射器可能期望mime类型的text / json.除了告诉RestTemplate映射到String :: class.java,然后手动实例化JacksonObjectMapper的实例,有没有办法告诉我的RestTemplate将返回的mime类型视为JSON?

解决方法:

您也可以使用:https://github.com/FasterXML/jackson-module-kotlin,而不是为数据类中的所有属性提供默认值

这个Jackson模块允许您序列化和反序列化Kotlin的数据类,而不必担心提供一个空的构造函数.

在Spring Boot应用程序中,您可以使用@Configuration类注册模块,如下所示:

@Configuration
class KotlinModuleConfiguration {
    @Bean
    fun kotlinModule(): KotlinModule {
        return KotlinModule()
    }
}

除此之外,您还可以使用文档中提到的扩展功能向Jackson注册模块.

除了支持数据类之外,您还将获得Kotlin stdlib中的几个类的支持,例如Pair.

标签:spring-rest,java,spring,spring-boot,kotlin
来源: https://codeday.me/bug/20190824/1706920.html