JEE Restful将JSON绑定到JAVA

JEE Restful将JSON绑定到JAVA,java,json,rest,jakarta-ee,Java,Json,Rest,Jakarta Ee,我们正在开发一个JavaEE项目,需要公开一个使用JSON的RESTfulWeb服务。不幸的是,我无法在Http POST请求中将JSON参数绑定到Java对象。你能帮我吗 服务类别: @Path("claimserviceNew") public class SlsiRestServicesNew { @POST @Consumes({"application/xml", "application/json"}) @Produces(MediaType.APPLICATION_JSON) p

我们正在开发一个JavaEE项目,需要公开一个使用JSON的RESTfulWeb服务。不幸的是,我无法在Http POST请求中将JSON参数绑定到Java对象。你能帮我吗

服务类别:

@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;
    }

}
我的HTTP Post请求中的两个JSON参数:

{   { 
        "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]

json结构中的两个字段的名称如下:

{
    "field1": { "code": "SLV" },
    "field2": { "polizzenNummer": "1234" }
}
或者更好:

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

json结构中的两个字段的名称如下:

{
    "field1": { "code": "SLV" },
    "field2": { "polizzenNummer": "1234" }
}
或者更好:

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

正如我从您的描述&JSON中了解到的,我认为您希望传递封装在一个中的两个对象。为此,必须指定内部对象/变量名称。如下- {“mandant”:{ “代码”:“SLV” },

“vertrag”:{ “polizzenNummer”:“1234” }


}

正如我从您的描述&JSON中了解到的,我认为您希望传递封装在一个中的两个对象。为此,必须指定内部对象/变量名称。如下- {“mandant”:{ “代码”:“SLV” },

“vertrag”:{ “polizzenNummer”:“1234” }


}

您的REST方法只能通过Json绑定接收一个对象。 在这种情况下,您可能希望创建一个对象来封装这两个对象:

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 ";
}

REST方法只能通过Json绑定接收一个对象。 在这种情况下,您可能希望创建一个对象来封装这两个对象:

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 ";
}

您的JSON无效。我如何才能使其有效?请确保它符合标准。但是你的下一个问题是你不能简单地按你现在的方式发布多个对象。请参阅以获取备选方案。您的JSON无效。我如何才能使其有效?请确保它符合标准。但是你的下一个问题是你不能简单地按你现在的方式发布多个对象。请参阅以获取替代方案。