Born in Nova Varoš, Šaponjić started playing football at local clubs Zlatar Nova Varoš and Sloboda Užice before joining the youth academy of Partizan. He made his senior debut for the club in a league game on 30 November 2013, coming on as a 76th-minute substitute in a 2–0 home win over Spartak Subotica. He eventually failed to make any other competitive appearance in the 2013–14 season. On 30 May 2014, he signed his first professional contract with Partizan, penning a three-year deal. He scored his first competitive goal for the team in a 2–0 away victory over Jagodina in the second leg of the Serbian Cup semi-final on 8 April 2015. Five days later, he scored his first league goal in a 3–1 away win over OFK Beograd. In total, he scored 5 goals in 16 appearances in all competitions during the 2014–15 season. On 25 July 2015, Šaponjić scored a brace in a 6–0 home league win over Jagodina. He scored his first international goal for Partizan with an overhead kick in a 2–1 home win over BATE Borisov in the return leg of the Champions League play-off round on 26 August 2015. This was the club's 100th victory in European football. He also scored both goals for Partizan in their 2–0 Serbian Cup win over Sinđelić Beograd on 28 October 2015.
On 12 January 2016, Šaponjić signed a five-and-a-half-year contract with Portuguese champions Benfica and was immediately assigned to their reserve team. In July 2017, he was loaned out to Belgian club Zulte Waregem.
Atlético Madrid
On 11 July 2019, Šaponjić signed a three-year contract with Atlético Madrid for an undisclosed fee, reported to be in region of 500 thousand euros.
International career
Internationally, Šaponjić represented his homeland at various youth levels. He was the team's joint top scorer with five goals in their unsuccessful qualification campaign for the 2014 UEFA Under-17 Championship. With three goals, Šaponjić was the team's joint top scorer in their unsuccessful qualification campaign for the 2015 UEFA Under-19 Championship. Šaponjić was included in the final 21-man squad for the 2015FIFA U-20 World Cup. He scored an injury time equalizer against Hungaryin the round of 16 on 10 June 2015, with Serbia eventually winning the game 2–1 after extra time. On 17 June 2015, he scored an extra time winning goal in the semi-final against Mali. He was the team's joint top scorer with two goals, as Serbia eventually won the tournament.