java - 请求正文中的父类(super class) - 'application/xml;charset=UTF-8' 不受支持

标签 java xml spring jaxb

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

我的 super 类看起来像这样:

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

我的 child 类(class):

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

我的 Controller :

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

      }

问题是当我使用有效的 XML 发送 post 请求时,出现以下错误:

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 时,一切正常,我得到了正确的对象。有人遇到过类似的问题吗?

最佳答案

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

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

关于java - 请求正文中的父类(super class) - 'application/xml;charset=UTF-8' 不受支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39588593/

相关文章:

java - 如何测试安全的 Spring Controller

Java 语言检测在给定相同输入的情况下返回不同的概率

java - 如何生成遵守 checkstyle 规则的 toString 和 hashCode 方法

java - 创建启动画面

javascript - 按属性查找 xml 元素

java - Spring中无法导入 `configureRepositoryRestConfiguration`

java - GIF 基于每台计算机的速度?

python:转义XML中的非ascii字符

mysql - 将 OpenStreetMap 数据(OSM 文件)导入 MySQL 数据库/SQL 文件

hibernate - Spring + Hibernate SessionFactory + AbstractRoutingDataSource