【问题标题】:Supperclass in request body - 'application/xml;charset=UTF-8' not supported请求正文中的超类 - 'application/xml;charset=UTF-8' 不支持
【发布时间】:2016-09-20 07:55:27
【问题描述】:

我想向我的端点发送一个 xml 对象,但我将拥有该对象的多种类型,并且我想使用继承。

我的超班长这样:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso(Sgr.class)
public class AbstractSgr {

  @XmlAttribute(required = true)
  protected String id;

  @XmlAttribute(required = true)
  protected String field1;

  @XmlAttribute(required = true)
  protected String field2;

  @XmlElement
  @XmlSchemaType(name = "date")
  protected LocalDate startDate;

  @XmlElement
  @XmlSchemaType(name = "date")
  protected LocalDate endDate;
//getters setters
  }

我的孩子班:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "sgr")
public class Sgr extends AbstractSgr {

  @XmlElementWrapper(name = "competitions")
  @XmlElement(name = "competition")
  private List<String> competitions;

  @XmlElementWrapper(name = "games")
  @XmlElement(name = "game")
  private List<String> games;
//getters setters
  }

还有我的包裹信息:

@XmlJavaTypeAdapters({
    @XmlJavaTypeAdapter(type = java.time.LocalDate.class, value = LocalDateAdapter.class),
})
@XmlSchema(namespace = "http", elementFormDefault = XmlNsForm.QUALIFIED)

我的控制器:

@RequestMapping(value = "/test/mapping", method = RequestMethod.POST,
      consumes = MediaType.APPLICATION_XML_VALUE)
  public ResponseEntity<HttpStatus> saveSgr(
      @RequestBody final AbstractSgr sgr) throws ServiceException {

      }

问题是当我使用有效的 XML 发送发布请求时,我收到以下错误:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/xml;charset=UTF-8' not supported
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.readWithMessageConverters(HandlerMethodInvoker.java:645) ~[spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestBody(HandlerMethodInvoker.java:604) ~[spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:353) ~[spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:170) ~[spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) [spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) [spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) [spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) [spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE]

但是当我将 sgr 对象的类型更改为 Sgr 时,一切正常,我得到了正确的对象。有人遇到过类似的问题吗?

【问题讨论】:

    标签: java xml spring jaxb


    【解决方案1】:

    尝试将依赖添加到您的 pom.xml 中

    <dependency>
       <groupId>com.fasterxml.jackson.dataformat</groupId>
       <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>
    

    【讨论】:

      【解决方案2】:

      不,我认为这是因为您传入的 XML 具有只能编组为特定子类型但不能编组为抽象类型的结构。因此,对于每个子类型,您都可以定义请求方法。一旦将其编组到您的特定对象,您就可以使用继承。

      【讨论】:

        猜你喜欢
        • 2015-03-26
        • 2018-07-24
        • 2015-11-01
        • 1970-01-01
        • 2016-12-07
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多