第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 Spring Boot 中使用顯式指定的編組器

如何在 Spring Boot 中使用顯式指定的編組器

白板的微信 2023-08-16 10:18:34
我正在嘗試創(chuàng)建一個(gè)能夠生成 XML 輸出的 REST 服務(wù)(我有一個(gè)封裝在 HATEOAS 對象內(nèi)的自定義類)。映射是這樣的:@GetMapping("/customclass")Resource<CustomClass> custom() {    return new Resource<CustomClass>(new CustomClass());}Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not marshal [Resource { content: CustomClass(a=10, string=abc), links: [] }]: null; nested exception is javax.xml.bind.MarshalException - with linked exception:[com.sun.istack.internal.SAXException2: class test.CustomClass nor any of its super class is known to this context.javax.xml.bind.JAXBException: class test.CustomClass nor any of its super class is known to this context.]]我很確定我的 CustomClass 沒有任何問題。如果我使用以下映射代替@GetMapping("/customclass")CustomClass custom() {    return (new CustomClass());}然后就可以正常工作了。如果我嘗試手動(dòng)編組(通過在主方法內(nèi)部設(shè)置內(nèi)容然后運(yùn)行它),它也可以正常工作。如果我將 CustomClass 的實(shí)例包裝在 Resource 實(shí)例中也可以。據(jù)我了解,問題是 SpringApplication 中的編組器使用的上下文僅了解 HATEOAS 資源,我需要一些如何使其了解 CustomClass 的方法。我嘗試使用類似的東西(來自https://stackoverflow.com/a/40398632)@Configurationpublic class ResponseResolver  {    @Bean    public Marshaller marshaller() {        try {            System.out.println("getting marshaller");            JAXBContext context = JAXBContext.newInstance(CustomClass.class, Resource.class);            return context.createMarshaller();        } catch (JAXBException e) {            throw new RuntimeException(e);        }    }}但這不起作用(我在這里有很多猜測,因?yàn)槲覍?Spring Boot 的內(nèi)部工作原理不太了解)。https://stackoverflow.com/a/14073899中也有一個(gè)有希望的答復(fù),但 ContextResolver 不在我的項(xiàng)目類路徑中。我還考慮過將 Resource 包裝在另一個(gè)類中,然后使用 XmlSeeAlso 注釋,但這會(huì)弄亂我的 XML,并且會(huì)有點(diǎn)難看。那么是否可以定義 SpringApplication 能夠獲取的自定義 JAXBContext?
查看完整描述

1 回答

?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

來自 Spring Boot 文檔?Spring Message 消息轉(zhuǎn)換器

Spring MVC 使用 HttpMessageConverter 接口來轉(zhuǎn)換 HTTP 請求和響應(yīng)。合理的默認(rèn)值是開箱即用的。例如,對象可以自動(dòng)轉(zhuǎn)換為 JSON(通過使用 Jackson 庫)或 XML(通過使用 Jackson XML 擴(kuò)展(如果可用),或者通過使用 JAXB(如果 Jackson XML 擴(kuò)展不可用))。默認(rèn)情況下,Jaxb2RootElementHttpMessageConverter – 將 Java 對象與 XML 相互轉(zhuǎn)換(僅當(dāng)類路徑上存在 JAXB2 時(shí)才添加)

自定義轉(zhuǎn)換器配置

@Configuration

public class WebConfig implements WebMvcConfigurer {


? ? @Override

? ? public void configureMessageConverters(

? ? ? List<HttpMessageConverter<?>> converters) {


? ? ? ? messageConverters.add(createXmlHttpMessageConverter());

? ? ? ? messageConverters.add(new MappingJackson2HttpMessageConverter());

? ? }

? ? private HttpMessageConverter<Object> createXmlHttpMessageConverter() {

? ? ? ? MarshallingHttpMessageConverter xmlConverter =?

? ? ? ? ? new MarshallingHttpMessageConverter();


? ? ? ? XStreamMarshaller xstreamMarshaller = new XStreamMarshaller();

? ? ? ? xmlConverter.setMarshaller(xstreamMarshaller);

? ? ? ? xmlConverter.setUnmarshaller(xstreamMarshaller);


? ? ? ? return xmlConverter;

? ? }

}


查看完整回答
反對 回復(fù) 2023-08-16
  • 1 回答
  • 0 關(guān)注
  • 142 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號