Я изучаю загрузку Spring прямо сейчас, и я использую ее в качестве бэкэнда, и я использую React в качестве внешнего интерфейса.
Я сохраняю данные через JPA Hibernate, каждое свойство сохраняется правильно, но имя_команды является не сохраняется, и я не знаю, почему он не сохраняется, я надеюсь, что вы можете помочь мне с этим.
Мой MySQL настольный проигрыватель имеет 4 свойства: id - это первичный ключ, age, name , team_name как внешний ключ
Тогда у таблицы MySQL Team есть одно имя свойства, которое является первичным ключом. И как вы можете видеть в коде Java, игрок и команда находятся в отношениях.
И когда я могу зарегистрировать свойство this.state.team, оно дает мне имя команды, оно не равно нулю, оно просто не сохраняется в таблице MySQL.
Обновленный код:
Java Объект игрока:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Player {
@Id
private String id;
private String name;
private String age;
@ManyToOne
@JsonBackReference
private Team team;
}
Java Элемент команды:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Team {
@Id
private String name;
@JsonManagedReference
@OneToMany(mappedBy = "team")
private List<Player> players;
}
Код реакции:
class Player extends Component {
constructor(){
super();
this.state={
player:{},
playerName: null,
id:null,
flag:null,
age:null,
team:null,
name: null
}
this.handleSubmit = this.handleSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
this.getPlayerData = this.getPlayerData.bind(this)
}
async getPlayerData(playerName){
const proxyurl = "https://cors-anywhere.herokuapp.com/";
const url = "https://www.hltv.org/search?term=" + playerName
const fullUrl= proxyurl+url
const response = await fetch(fullUrl)
const arr = await response.json()
const player = arr[0].players[0];
const fullName= player.firstName + " " + player.lastName
this.setState({
playerName: player.nickName,
id: player.id,
flag: player.flagUrl,
age:null,
team:{
name: player.team.name
},
name: fullName
})
}
async createNonExistingTeam(){
const teamData={
name:this.state.team.name
}
await fetch("/api/team" , {
method: 'POST' ,
headers : {
'Accept' : 'application/json',
'Content-Type' : 'application/json'
},
body: JSON.stringify(teamData)
})
}
async createNonExistingPlayer(){
const data={
id: this.state.playerName,
age: null,
name:this.state.name,
team_name: this.state.team.name
}
await fetch("/api/player" , {
method: 'POST' ,
headers : {
'Accept' : 'application/json',
'Content-Type' : 'application/json'
},
body: JSON.stringify(data)
})
await this.handleSubmit()
}
async handleSubmit(event){
const {playerName} = this.state
try{
const response = await fetch(`/api/player/${playerName}` , {
method: 'GET' ,
headers : {
'Accept' : 'application/json',
'Content-Type' : 'application/json'
}})
const output = await response.json();
this.setState({
player:output
})
} catch(e){
await this.getPlayerData(playerName)
await this.createNonExistingTeam()
await this.createNonExistingPlayer()
}
const style = {
marginTop: 20,
marginLeft: 30
}
const {player} = this.state
const {playerData} = this.state
const {flag} = this.state
const {id} = this.state
const picLink = "https://static.hltv.org//images/playerprofile/bodyshot/compressed/" + id + ".png"
const data =
<div>
<PlayerData
style={style}
ign={player.id}
name={player.name}
pic={picLink}
nation={flag}
age={player.age}
/>
</div>
ReactDOM.render(data,document.getElementById('playerData'))
}
async handleChange(event) {
this.setState({
[event.target.name]: event.target.value
});
}
РЕДАКТИРОВАТЬ Код контроллера:
PlayerController:
@RestController
@RequestMapping("/api")
public class PlayerController {
@Autowired
private PlayerRepository playerRepository;
@GetMapping("/players")
List<Player>getAllPlayers(){
return playerRepository.findAll();
}
@PostMapping("/player")
ResponseEntity<Player> createPlayer(@Valid @RequestBody Player player) throws URISyntaxException{
Player result = playerRepository.save(player);
return ResponseEntity.created(new URI("/api/player" + result.getId())).body(player);
}
@GetMapping("/player/{id}")
ResponseEntity<?> getPlayer(@PathVariable String id){
Optional<Player>result = playerRepository.findById(id);
ResponseEntity<Player> resMap = result.map(response->ResponseEntity.ok().body(response)).orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
return resMap;
}
@GetMapping("/{name}/players")
List<Player> findPlayers(@PathVariable Team name){
return playerRepository.findByTeam(name);
}
}
TeamController:
@RestController
@RequestMapping("/api")
public class TeamController {
@Autowired
private TeamRepository tRepository;
@PostMapping("/team")
ResponseEntity<Team> createTeam(@Valid @RequestBody Team team) throws URISyntaxException{
Team result = tRepository.save(team);
return ResponseEntity.created(new URI("/api/team/" + result.getName())).body(team);
}
}
EDIT:
Я понял, что когда я печатаю своего игрока в методе создания игрока в Java, команда отображается как NULL, поэтому я предполагаю, что у меня есть проблема в моем запросе POST.