Я пытаюсь использовать XML, полученный через веб-сервис REST с помощью Springboot, я новичок в этом, так что надеюсь, что я совершаю довольно тривиальную ошибку.
Я думаю, что XML может быть плохо структурирован, но у меня есть следующее ....
<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>
Но сведения об игроке не читаются, я получаю следующее, когда делаю toString для полученных данных.
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))
Я могу получить информацию, когда окружаю теги игрока
<players> ... </players>
но изменение XML имеет большое влияние в других местах, так что надеемся исправить с XML, как есть.
Мой код выглядит следующим образом ...
@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))
Аннотация @Data - это проект Lombok, поэтому создаются геттеры, сеттеры и т. Д.