Итак, я хочу отправить данные на сервер в формате JSON.Пользователь должен выбрать опцию из списка данных, а идентификатор и имя будут отправлены на сервер REST.Когда я отправляю идентификатор и имя выбранной опции из списка данных, она выдает мне сообщение об ошибке: внутренняя ошибка сервера 500 и SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON.
Я отредактировал данные, чтобы отправить имя на сервер только с помощью параметров отладки mozilla, затем он принимает запрос POST с ответом 201.Когда я отправляю только идентификатор, он выдает тот же 500 внутренних ошибок сервера.Почему он принимает его только при отправке имени?Как я могу изменить его так, чтобы запрос Get показывал идентификатор и имя?
Я использую Angular 7 для внешнего интерфейса и REST-сервер glassfish для внутреннего интерфейса.Я надеюсь, что кто-то может помочь мне.Я проверил формат JSON в контроллере JSON, и он прошел тест.Я предоставлю несколько фотографий в комментариях, чтобы показать вам, что я имею в виду.
Вот пример того, что я пытаюсь отправить:
{"id":3,"name":"Burger King"}
Что он принимает только:
{"name":"Burger King"}
FRONTEND
HTML-файл:
<label for="codes">Choose a restaurant:</label>
<form
(ngSubmit)="onOrganize(f)"
#f="ngForm">
<input type="text" list="codes" [(ngModel)]=codeValue [ngModelOptions]="{standalone: true}" (change)="saveCode($event)">
<datalist id="codes">
<option *ngFor="let c of codeList" [value]="c.name" >{{c.name}}</option>
</datalist>
</form>
Файл машинописи:
export class OrganizeComponent implements OnInit {
public codeValue: string;
codeList = [
{ restaurantId: 1, name: 'Mcdonalds' },
{ restaurantId: 2, name: 'Kentucky Fried Chicken' },
{ restaurantId: 3, name: 'Burger King' },
{ restaurantId: 4, name: 'Dominos pizza' },
{ restaurantId: 5, name: 'New York Pizza' }
];
@ViewChild('f') form: NgForm;
restaurant = {
restaurantId: 1,
name: " "
};
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'my-auth-token'
})
};
constructor(private http: HttpClient) {
}
ngOnInit() {
}
public saveCode(e): void {
let name = e.target.value;
let list = this.codeList.filter(x => x.name === name)[0];
this.restaurant.restaurantId = list.restaurantId;
this.restaurant.name = list.name;
console.log(list.restaurantId);
console.log(list.name);
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
const data = {
id: list.restaurantId,
name: list.name
};
console.log(data)
var yourDataStr = JSON.stringify(data)
this.http.post('http://localhost:8080/aquadine-jee/resources/restaurant',
JSON.parse(JSON.stringify(data)) , httpOptions)
.subscribe( // subscribe to observable http.post
res => {
console.log("response" + " " + res); // log results otherwise log error
},
err => {
console.log('Error occured');
}
);
}
BACKEND
Файл ресторана:
@Entity
@NamedQueries({
@NamedQuery(name = "Restaurant.findOne", query = "select m from Restaurant m where m.id = :id"),
@NamedQuery(name = "Restaurant.getAll", query = "select m from Restaurant m")
})
public class Restaurant {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
// @NotBlank
private String naam;
// @NotBlank
private String adres;
private int restaurantId;
public Restaurant(){
}
public Restaurant( int id, int restaurantId, String naam) {
this.id = id;
this.restaurantId = restaurantId;
this.naam = naam;
}
@GET
@Produces("application/json")
public Response all(){
List<Restaurant> all = repositoryService.getAllRestaurants();
return Response
.status(200)
.header("Access-Control-Allow-Origin", "*")
.entity(all)
.build();
}
@POST
@Consumes("application/json")
public Response save(Restaurant restaurant){
repositoryService.save(restaurant);
return Response
.status(201)
.build();
}
Файл репозитория
// Restaurant services
public List<Restaurant> getAllRestaurants(){
return entityManager.createNamedQuery("Restaurant.getAll", Restaurant.class).getResultList();
}
public Restaurant find(Integer id){
return entityManager.createNamedQuery("Restaurant.findOne", Restaurant.class).setParameter("id", id).getSingleResult();
}
public void save(Restaurant restaurant){
entityManager.persist(restaurant);
}
public void update(Restaurant restaurant){
entityManager.merge(restaurant);
}
public void delete(Restaurant restaurant){
entityManager.remove(restaurant);
}