Spring web XML 不尊重 Java11 中的 XmlRootElement
Spring web XML not respecting XmlRootElement in Java11
我将我的应用迁移到 JDK11(从 JDK 8)所以我最多 springboot
2.2.4.RELEASE
然后我添加 com.fasterxml.jackson.dataformat:jackson-dataformat-xml
我的模型:
@XmlRootElement(name = "dataModel")
public class DataModel {
...
}
我的控制器:
@RequestMapping(value = "/{model}/columns", method = RequestMethod.GET, consumes = MediaType.ALL_VALUE, produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<DataModel> getColumnsModel(@PathVariable String model) {
LOGGER.info("getColumnsModel : model[{}]", model);
DataModel dataModel = modelService.getColumns(model);
return Optional.ofNullable(dataModel).map(result -> new ResponseEntity<>(result, HttpStatus.OK)).orElse(new ResponseEntity<>(HttpStatus.NO_CONTENT));
}
客户:
curl -s --header "Accept: application/xml" http://localhost:8084/api/foo/columns
JDK8:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataModel><columns>author</columns><columns>zip</columns><columns>city</columns><columns>element</columns><columns>element2</columns><columns>date</columns><columns>title</columns></dataModel>
JDK11:
<DataModel><columns><columns>author</columns><columns>zip</columns><columns>city</columns><columns>element</columns><columns>element2</columns><columns>date</columns><columns>title</columns></columns></DataModel>
新结果很奇怪:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataModel>
=> <DataModel>
<dataModel><columns>author</columns>...</dataModel>
=> <DataModel><columns><columns>author</columns>...</columns></DataModel>
我尝试添加这个依赖但没有解决:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.2</version>
</dependency>
删除这个:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
我将我的应用迁移到 JDK11(从 JDK 8)所以我最多 springboot
2.2.4.RELEASE
然后我添加 com.fasterxml.jackson.dataformat:jackson-dataformat-xml
我的模型:
@XmlRootElement(name = "dataModel")
public class DataModel {
...
}
我的控制器:
@RequestMapping(value = "/{model}/columns", method = RequestMethod.GET, consumes = MediaType.ALL_VALUE, produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<DataModel> getColumnsModel(@PathVariable String model) {
LOGGER.info("getColumnsModel : model[{}]", model);
DataModel dataModel = modelService.getColumns(model);
return Optional.ofNullable(dataModel).map(result -> new ResponseEntity<>(result, HttpStatus.OK)).orElse(new ResponseEntity<>(HttpStatus.NO_CONTENT));
}
客户:
curl -s --header "Accept: application/xml" http://localhost:8084/api/foo/columns
JDK8:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataModel><columns>author</columns><columns>zip</columns><columns>city</columns><columns>element</columns><columns>element2</columns><columns>date</columns><columns>title</columns></dataModel>
JDK11:
<DataModel><columns><columns>author</columns><columns>zip</columns><columns>city</columns><columns>element</columns><columns>element2</columns><columns>date</columns><columns>title</columns></columns></DataModel>
新结果很奇怪:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataModel>
=> <DataModel>
<dataModel><columns>author</columns>...</dataModel>
=> <DataModel><columns><columns>author</columns>...</columns></DataModel>
我尝试添加这个依赖但没有解决:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.2</version>
</dependency>
删除这个:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>