У меня есть служба REST Java, которая предоставляет несколько CRUD-услуг клиентам (используя Grizzly и Jersey). Я искал эту проблему в течение нескольких дней, и я действительно ее не понимаю, потому что есть другой звонок, предоставляемый сервером, который почти такой же, и он работает просто отлично.500 Внутренняя ошибка сервера - Джерси (веб-служба Java)
Вот код фрагмент код сервиса, который не работает:
@Path("objets")
public class ObjetResource {
@PUT
@Path("/{code}")
@Consumes(MediaType.APPLICATION_JSON)
public void updateObject(
@PathParam("code") String code,
final Objet updatedObject){
System.out.println("UpdateObject is called!");
}
}
Эта услуга должна быть вызвано с следующим адресом:
Вот это сервис, который работает:
@Path("domaines")
public class DomaineResource {
@PUT
@Path("/{nom}")
@Consumes(MediaType.APPLICATION_JSON)
public void updateDomaine(
@PathParam("nom") String nom,
final Domaine updatedDomaine
){
System.out.println("UpdateDomaine is called!");
}
}
Эта услуга работает при вызове со следующим URL: http://localhost:8080/webservice/domaines/newDomaine
К сожалению, я получаю «Внутренняя ошибка сервера 500» ... И, конечно, «Эта функция называется» никогда не отображается ...): Я ve попытался удалить всю функцию «updateObject», и когда я это сделаю, ошибка станет «405 Method not allowed» D :!
У вас есть идея, почему у меня возникла эта проблема?
Есть ли способ получить дополнительную информацию об ошибке, которая происходит? Это очень сложно решить мою проблему с этой небольшой информацией):
EDIT: Я пробовал несколько вещей, чтобы исправить мою проблему. Во-первых, я попытался упростить свою функцию «updateObjet». Я заметил, что-то довольно странную:
Когда я посылаю следующее: JSON
{ "code" : "codeValue" }
«UpdateObject называется» успешно отображается. Однако если я пришлю
{ "code" : "codeValue", "type" : "platform.field" }
Ничего не отображается.
Вот код моего класса Objet:
package classes;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Objet extends Model{
@XmlElement(name="code")
private String code;
@XmlElement(name="type")
private String type;
@XmlElement(name="parent")
private String parent;
@XmlElement(name="annotations")
private String annotations;
@XmlElement(name="ontologyuri")
private String ontologyuri;
@XmlElement(name="access")
private String access;
public Objet(){
}
public Objet(String code, String type, String parent, String annotations, String ontologyuri, String access){
this.code = code;
this.type = type;
this.parent = parent;
this.annotations = annotations;
this.ontologyuri = ontologyuri;
this.access = access;
}
public void setCode(String code) {
this.code = code;
}
public String getCode(){
return this.code;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public String getAnnotations() {
return annotations;
}
public void setAnnotations(String annotations) {
this.annotations = annotations;
}
public String getOntologyuri() {
return ontologyuri;
}
public void setOntologyuri(String ontologyuri) {
this.ontologyuri = ontologyuri;
}
public String getAccess(){
return access;
}
public void setAccess(String access) {
this.access = access;
}
public String toString(){
return "Code : " + getCode() + " Type : " + getType() + " Parent : " + getParent() + " Annotations : " + getAnnotations() + " ontologyuri : " + getOntologyuri() + " access : " + getAccess();
}
}
А вот код моего класса Domaine:
package classes;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Domaine extends Model{
@XmlElement(name="nom")
private String nom;
@XmlElement(name="adresse")
private String adresse;
@XmlElement(name="description")
private String description;
@XmlElement(name="access")
private String access;
@XmlElement(name="plateformes")
private ArrayList<Plateforme> plateformes;
public Domaine(){}
public Domaine(String nom, String adresse, String description, String access){
this.nom = nom;
this.adresse = adresse;
this.description = description;
this.access = access;
}
public Domaine(String nom, String adresse, String description, String access, ArrayList<Plateforme> plateformes){
this.nom = nom;
this.adresse = adresse;
this.description = description;
this.access = access;
this.plateformes = plateformes;
}
public String getNom(){
return this.nom;
}
public void setNom(String nom){
this.nom = nom;
}
public String getAdresse(){
return this.adresse;
}
public void setAdresse(String adresse){
this.adresse = adresse;
}
public String getDescription(){
return this.description;
}
public void setDescription(String desc){
this.description = desc;
}
public String getAccess(){
return this.access;
}
public void setAccess(String access){
this.access = access;
}
//Manipulation des plateformes
public ArrayList<Plateforme> getPlateformes(){
return this.plateformes;
}
public void addPlateforme(Plateforme p){
this.plateformes.add(p);
}
public void removePlateforme(Plateforme p){
this.plateformes.remove(p);
}
public String toString(){
return "Nom : " + getNom() + " Adresse : " + getAdresse() + " Description : " + getDescription() + " Access " + getAccess();
}
}
EDIT 2: Я продолжал пытаться понять моя ошибка и добавьте несколько вещей, которые могут вам помочь: Прежде всего, я заметил, что когда я делаю «GET» на http://localhost:8080/webservice/domaines, я получаю следующий JSON:
[{"type":"domaine","nom":"DomaineTest0","adresse":"domaine de test 0","description":"","access":"test"},
{"type":"domaine","nom":"DomaineTest1","adresse":"Domaine de test 1","description":""}]
Как вы можете видеть, есть поле типа, которое не указано в моем классе Domaine. Я немного искал документацию Джерси, но на данный момент я не могу понять, откуда взялось это поле типа. Что интересного в этой информации, так это то, что класс Objet I имеет поле типа. Я думал, может быть, это поле типа, которое кажется таинственным, мешает «типу» поля моего объекта Objet?
В вашем файле журнала есть что-то важное? –
Пожалуйста, разместите stacktrace – gregwhitaker
На моем веб-сервере нет ошибок ...): [INFO] --- exec-maven-plugin: 1.2.1: java (default-cli) @ jersey-service --- avr. 01, 2016 9:08:28 AM org.glassfish.grizzly.http.server.NetworkListener start INFOS: Начальный слушатель, связанный с [localhost: 8080] avr. 01, 2016 9:08:28 AM org.glassfish.grizzly.http.server.HttpServer start INFOS: [HttpServer] запущен. Приложение для начинающих с WADL доступно по адресу http: // localhost: 8080/webservice/application.wadl Нажмите Enter, чтобы остановить его ... –