JEE Restful Привязать JSON к JAVA - PullRequest
0 голосов
/ 01 июня 2018

Мы разрабатываем проект Java EE и нам необходимо предоставить веб-сервис RESTFul, использующий JSON.К сожалению, я не могу связать параметр JSON с объектом Java в запросе Http-POST.Не могли бы вы мне помочь?

Класс обслуживания:

@Path("claimserviceNew")
public class SlsiRestServicesNew {

@POST
@Consumes({"application/xml", "application/json"})
@Produces(MediaType.APPLICATION_JSON)
public String registerClaimWithPaymentNew( Mandant mandant, Vertrag vertrag){

    return mandant.getCode() + " new ";
}

}

Класс Mandant:

@XmlRootElement(name="mandant")
@XmlAccessorType(XmlAccessType.FIELD)
public class Mandant {


    @XmlAttribute(required=true)
    private String code;


    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

}

Класс Vertrag:

@XmlRootElement(name="vertrag")
@XmlAccessorType(XmlAccessType.FIELD)
public class Vertrag {

    @XmlAttribute(required=true)
    private String polizzenNummer;

    public String getPolizzenNummer() {
        return polizzenNummer;
    }

    public void setPolizzenNummer(String polizzenNummer) {
        this.polizzenNummer = polizzenNummer;
    }

}

Мои оба параметра JSON в моем HTTP-запросе на запись:

{   { 
        "code": "SLV"
    },

     { 
        "polizzenNummer": "1234"
     }

}

Исключение на сервере:

Caused by: org.codehaus.jackson.JsonParseException: Unexpected character ('{' (code 123)): was expecting double-quote to start field name
 at [Source: org.apache.catalina.connector.CoyoteInputStream@cce46; line: 1, column: 6]
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433) [jackson-core-asl-1.9.9-redhat-2.jar:1.9.9-redhat-2]

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Как я понимаю из вашего описания и JSON, я думаю, что вы хотите передать оба объекта в один.Для этого необходимо указать имя внутренних объектов / переменных.Как показано ниже: {"mandant": {"code": "SLV"},

"vertrag": {"polizzenNummer": "1234"}

}

0 голосов
/ 01 июня 2018

Ваш метод REST может получать только ОДИН объект через Json Binding.В этом случае вы, вероятно, захотите создать один объект, который инкапсулирует оба:

public class MyInput {
   private Vertrag vertrag;
   private Mandant mandant;
   // .. getters and setters
}

Затем вы получите это в вашем методе REST:

@POST
@Consumes({"application/xml", "application/json"})
@Produces(MediaType.APPLICATION_JSON)
public String registerClaimWithPaymentNew(MyInput input){

    return input.getMandant().getCode() + " new ";
}
0 голосов
/ 01 июня 2018

Вы должны назвать два поля в структуре json следующим образом:

{
    "field1": { "code": "SLV" },
    "field2": { "polizzenNummer": "1234" }
}

Или даже лучше:

{
    "code": "SLV",
    "polizzenNummer": "1234"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...