Java 使用Springboot从REST post请求读取XML
我正在尝试使用Springboot使用RESTWebService接收的XML,我是新手,希望这是我犯的一个相当小的错误 我认为XML的结构可能很糟糕,但我有以下几点Java 使用Springboot从REST post请求读取XML,java,xml,rest,spring-boot,Java,Xml,Rest,Spring Boot,我正在尝试使用Springboot使用RESTWebService接收的XML,我是新手,希望这是我犯的一个相当小的错误 我认为XML的结构可能很糟糕,但我有以下几点 <ResultDetailsRequestModel> <tournament>Premier League</tournament> <fixture_date>2018-08-10</fixture_date> <description>result<
<ResultDetailsRequestModel>
<tournament>Premier League</tournament>
<fixture_date>2018-08-10</fixture_date>
<description>result</description>
<home_team>
<team_name>Man Utd</team_name>
<score>2</score>
<ht_score>1</ht_score>
<possession>46.3</possession>
<shots_on_target>6</shots_on_target>
<shots_off_target>1</shots_off_target>
<corners>2</corners>
<player gk="true" position="G" number="1">D de Gea</player>
<player position="D" number="2">V Lindelof</player>
</home_team>
</ResultDetailsRequestModel>
当我在播放器标签周围加上
<players> ... </players>
我收到的数据
ResultDetailsRequestModel(tournament=Premier League, fixture_date=Fri Aug 10 01:00:00 BST 2018, description=result, home_team=TeamResultXML(team_name=Man Utd, score=2, ht_score=1, possession=46.3, shots_on_target=6, shots_off_target=1, corners=2, players=null))
@Data注释是project Lombok,因此创建getter、setter等。当我尝试您的代码时,会出现错误: 线程“main”com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException中的异常:7次illegalannotationException计数 如果类具有@XmlElement属性,则它不能具有@XmlValue属性。 此问题与以下位置有关: 位于private java.lang.String PlayerXML.value 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 此问题与以下位置有关: 在public java.lang.String PlayerXML.getValue()中 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 类有两个同名的属性“players” 此问题与以下位置有关: 在public java.util.List TeamResultXML.getPlayers()中 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 此问题与以下位置有关: 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 类有两个同名的属性“守门员” 此问题与以下位置有关: 在public boolean PlayerXML.iskeeper()上 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 此问题与以下位置有关: 在private boolean PlayerXML.keeper 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 类有两个同名的属性“number” 此问题与以下位置有关: 在public int PlayerXML.getNumber()上 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 此问题与以下位置有关: 在private int PlayerXML.number 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 类有两个同名的属性“position” 此问题与以下位置有关: 在public java.lang.String PlayerXML.getPosition()中 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 此问题与以下位置有关: 位于private java.lang.String PlayerXML.position 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 类有两个同名的属性“sub” 此问题与以下位置有关: 在public java.lang.String PlayerXML.getSub()上 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 此问题与以下位置有关: 在private java.lang.String PlayerXML.sub 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 类有两个同名的属性“value” 此问题与以下位置有关: 在public java.lang.String PlayerXML.getValue()中 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 此问题与以下位置有关: 位于private java.lang.String PlayerXML.value 在PlayerXML上 在private java.util.List TeamResultXML.players 在TeamResultXML上 在public TeamResultXML ResultDetailsRequestModel.getHome_team()中 在ResultDetailsRequestModel 位于com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:445) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:277) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:124) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123) 位于com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法
@RestController
@RequestMapping("results") // http://localhost:8888/results
public class ResultsController {
@PostMapping(
consumes = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE },
produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE }
)
public String createBets(@RequestBody ResultDetailsRequestModel resultDetails) {
return "Received details: " + resultDetails.toString();
}
}
@Data
@XmlRootElement(name="ResultDetailsRequestModel")
public class ResultDetailsRequestModel {
private String tournament;
private Date fixture_date;
private String description;
private TeamResultXML home_team;
}
@Data
@XmlRootElement(name="home_team")
public class TeamResultXML implements Serializable {
private String team_name;
private int score;
private int ht_score;
private double possession;
private int shots_on_target;
private int shots_off_target;
private int corners;
@XmlElement(name="player")
private List<PlayerXML> players;
}
@Data
@XmlRootElement(name="player")
public class PlayerXML implements Serializable {
@XmlAttribute(name="gk")
private boolean goalkeeper;
@XmlAttribute(name="position")
private String position;
@XmlAttribute(name="number")
private int number;
@XmlAttribute(name="sub")
private String sub;
@XmlValue
private String value;
}
ResultDetailsRequestModel(tournament=Premier League, fixture_date=Fri Aug 10 01:00:00 BST 2018, description=result, home_team=TeamResultXML(team_name=Man Utd, score=2, ht_score=1, possession=46.3, shots_on_target=6, shots_off_target=1, corners=2, players=null))
ResultDetailsRequestModel [tournament=Premier League, fixture_date=Fri Aug 10 00:00:00 EDT 2018, description=result, home_team=TeamResultXML [team_name=Man Utd, score=2, ht_score=1, possession=46.3, shots_on_target=6, shots_off_target=1, corners=2, players=[PlayerXML [goalkeeper=true, position=G, number=1, sub=null, value=D de Gea], PlayerXML [goalkeeper=false, position=D, number=2, sub=null, value=V Lindelof]]]]