JEE Restful将JSON绑定到JAVA
我们正在开发一个JavaEE项目,需要公开一个使用JSON的RESTfulWeb服务。不幸的是,我无法在Http POST请求中将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
@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无效。我如何才能使其有效?请确保它符合标准。但是你的下一个问题是你不能简单地按你现在的方式发布多个对象。请参阅以获取替代方案。