亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

白板的微信 2023-08-16 10:18:34
我正在嘗試創建一個能夠生成 XML 輸出的 REST 服務(我有一個封裝在 HATEOAS 對象內的自定義類)。映射是這樣的:@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());}然后就可以正常工作了。如果我嘗試手動編組(通過在主方法內部設置內容然后運行它),它也可以正常工作。如果我將 CustomClass 的實例包裝在 Resource 實例中也可以。據我了解,問題是 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);        }    }}但這不起作用(我在這里有很多猜測,因為我對 Spring Boot 的內部工作原理不太了解)。https://stackoverflow.com/a/14073899中也有一個有希望的答復,但 ContextResolver 不在我的項目類路徑中。我還考慮過將 Resource 包裝在另一個類中,然后使用 XmlSeeAlso 注釋,但這會弄亂我的 XML,并且會有點難看。那么是否可以定義 SpringApplication 能夠獲取的自定義 JAXBContext?
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

來自 Spring Boot 文檔?Spring Message 消息轉換器

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

自定義轉換器配置

@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;

? ? }

}


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號