1

我有两个 REST API,其中一个是返回由 xsd 文件生成的响应对象,另一个是请求该对象。

生成类的示例:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AlternateNumberEntry21", propOrder = {
    "phoneNumber",
    "extension",
    "ringPattern",
    "description"
})
public class AlternateNumberEntry21 {

   @XmlElementRef(name = "phoneNumber", type = JAXBElement.class, required = false)
   protected JAXBElement<String> phoneNumber;

   @XmlElementRef(name = "extension", type = JAXBElement.class, required = false)
   protected JAXBElement<String> extension;

   @XmlElementRef(name = "ringPattern", type = JAXBElement.class, required = false)
   protected JAXBElement<RingPattern> ringPattern;

   @XmlElementRef(name = "description", type = JAXBElement.class, required = false)
   protected JAXBElement<String> description;
}

第二个 API 通过 RestTemplate 从第一个 API 调用端点。

  restTemplate.exchange(url, HttpMethod.GET, entity, AlternateNumberEntry21.class);

以及返回生成对象的第一个API的控制器方法:

@GetMapping("/alternate-numbers")
public ResponseEntity<AlternateNumberEntry21> getAlternateNumbers(@PathVariable String userId)  {
    return ResponseEntity.ok(incomingCallService.getAlternateNumbers(userId));
}

不幸的是,我收到了这个错误:

org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class javax.xml.bind.JAXBElement]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `javax.xml.bind.JAXBElement` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

我尝试使用 JAXBElement mixin 制作自定义 ObjectMapper,但它没有帮助。

@Configuration
public class CoreConfig {
    
    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.addMixIn(JAXBElement.class, JAXBElementMixIn.class);
        return objectMapper;
    }
}




@Slf4j
public abstract class JAXBElementMixIn<T> {

    @JsonCreator
    public JAXBElementMixIn(@JsonProperty("name") QName name,
                            @JsonProperty("declaredType") Class<T> declaredType,
                            @JsonProperty("scope") Class scope,
                            @JsonProperty("value") T value) {
        log.debug("name {} value {}", name, value);
    }
}

有没有办法将它正确反序列化为相同的类型类?

4

0 回答 0