RESTWeb服务-JSON请求映射到java复杂对象

RESTWeb服务-JSON请求映射到java复杂对象,java,json,rest,object,mapping,Java,Json,Rest,Object,Mapping,我正在尝试将JSON映射并发送到RESTWeb服务的Java对象。我正在Jersey Java中使用RESTful WS。 我是新来的,如果发送不正确,请更正。 **以下是我的JSON示例: 我在Google Rest插件中作为原始数据输入的Json是:** 如下 JSON输入: 我需要将其映射到:com.cordys.entity.bean.ClaimTask claimTaskObj {“taskId”:[“002481F0-8E9F-11E3-FB97-B80661C15631”,“002

我正在尝试将JSON映射并发送到RESTWeb服务的Java对象。我正在Jersey Java中使用RESTful WS。

我是新来的,如果发送不正确,请更正。

**以下是我的JSON示例:

我在Google Rest插件中作为原始数据输入的Json是:** 如下

JSON输入: 我需要将其映射到:com.cordys.entity.bean.ClaimTask claimTaskObj

{“taskId”:[“002481F0-8E9F-11E3-FB97-B80661C15631”,“002481F0-8E9F-11E3-FB97-B80661C15635”]

================================================================================= 我发现以下错误:

因此,每次我发送此请求时,都会出现以下错误:

com.sun.jersey.spi.container.container响应MapPableContainerException 严重:MappableContainerException中包含的异常无法映射到响应,并重新引发到HTTP容器 org.codehaus.jackson.map.exc.UnrecognizedPropertyException:未识别的字段“taskId”(Class com.business.entity.bean.ClaimTask),未标记为可忽略 在[来源:org.apache.catalina.connector]。CoyoteInputStream@409b5f9c;行:1,列:12](通过引用链:com.business.entity.bean.ClaimTask[“taskId”]) 位于org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53) 位于org.codehaus.jackson.map.desr.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267) 位于org.codehaus.jackson.map.desr.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673) 位于org.codehaus.jackson.map.desr.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659) 位于org.codehaus.jackson.map.desr.BeandSerializer.handleUnknownProperty(BeandSerializer.java:1365) 位于org.codehaus.jackson.map.desr.BeanDeserializer.\u handleUnknown(BeanDeserializer.java:725) 位于org.codehaus.jackson.map.deser.BeandSerializer.deserializeFromObject(BeandSerializer.java:703) 在org.codehaus.jackson.map.deser.BeandSerializer.deserialize(BeandSerializer.java:580)上 位于org.codehaus.jackson.map.ObjectMapper.\u readValue(ObjectMapper.java:2704) 位于org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315) 位于org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419) 位于com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139) 位于com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:488) 位于com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjecta

================================================================================= 我的Rest Web服务方法是:

我的休息服务方式

@POST
@ApiResponses(value = {
        @ApiResponse(code = 200, message = STATUS_200),
        @ApiResponse(code = 500, message = STATUS_500)
})
@Path("/claimTaskObj")
@Consumes({ "application/json", "application/xml"})
@Produces({ "application/json", "application/javascript", "application/xml" })
public Response claimTaskObj(
        com.business.entity.bean.ClaimTask claimTaskObj,
        @HeaderParam("SAMLart") String samlArt,
        @HeaderParam("otdsticket") String oTAuthenticationHeader,
        @Context UriInfo uriInfo) {
    System.out.println("TaskService.claimTask()====== IN");
    // Integration with JAXWS
    //System.out.println("oTAuthenticationHeader ="+oTAuthenticationHeader);
    ClaimTaskJaxWsClient claimTaskClient = new ClaimTaskJaxWsClient();
    ClaimTaskResponse jaxWSResponse = null;
    MultivaluedMap<String, String> inputParameters = uriInfo.getQueryParameters();
    inputParameters.add("task_id", claimTaskObj.getTaskId().get(0));

    String callback = inputParameters.getFirst("callback");
    try {
        jaxWSResponse = claimTaskClient.executeSoapRequest(inputParameters, samlArt,oTAuthenticationHeader);
        return Util.getRespone(jaxWSResponse, callback, 200);
    } catch (com.business.jaxws.task.claimtask.businessFaultDetail e) {
        return Util.getRespone(e.getFaultInfo(), callback, 500);
    } 
@POST
@ApiResponses(值={
@ApiResponse(代码=200,消息=STATUS_200),
@ApiResponse(代码=500,消息=STATUS_500)
})
@路径(“/claimTaskObj”)
@使用({“application/json”、“application/xml”})
@生成({“application/json”、“application/javascript”、“application/xml”})
公众回应要求(
com.business.entity.bean.ClaimTask claimTaskObj,
@黑德帕兰(“萨姆拉特”)弦萨姆拉特,
@HeaderParam(“otdsticket”)字符串oTAuthenticationHeader,
@上下文UriInfo(UriInfo){
System.out.println(“TaskService.claimTask()==IN”);
//与JAXWS的集成
//System.out.println(“oTAuthenticationHeader=“+oTAuthenticationHeader”);
ClaimTaskJaxWsClient claimTaskClient=new ClaimTaskJaxWsClient();
ClaimTaskResponse jaxWSResponse=null;
多值Map inputParameters=uriInfo.getQueryParameters();
add(“task_id”,claimTaskObj.getTaskId().get(0));
字符串回调=inputParameters.getFirst(“回调”);
试一试{
jaxWSResponse=claimTaskClient.executeSoapRequest(inputParameters、samlArt、oTAuthenticationHeader);
返回Util.getRespone(jaxWSResponse,回调,200);
}catch(com.business.jaxws.task.claimtask.businessFaultDetail e){
返回Util.getRespone(例如getFaultInfo(),回调,500);
} 
} 我的Jaxbi类是:

包com.business.entity.bean

    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "taskIdObj", propOrder = {
    "taskId"
})
@XmlRootElement(name = "ClaimTask", namespace = "http://schemas.business.com/notification/workflow/1.0")
public class ClaimTask implements Serializable {

    @XmlElement(name = "TaskId", namespace = "http://schemas.business.com/notification/workflow/1.0", required = true)
    protected List<String> taskId;


    public List<String> getTaskId() {
        if (taskId == null) {
            taskId = new ArrayList<String>();
        }
        return this.taskId;
    }

    public void setTaskId(String task_Id) {
         if (this.taskId == null) {
             this.taskId = new ArrayList<String>();
         }
         this.taskId.add(task_Id);
    }
    public void setTaskId(List<String> task_Id) {
     if (this.taskId == null) {
        this.taskId = new ArrayList<String>();
        }
    this.taskId.addAll(task_Id);
   }

  }
import java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
导入javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=“taskIdObj”,propOrder={
“任务ID”
})
@XmlRootElement(name=“ClaimTask”,命名空间=”http://schemas.business.com/notification/workflow/1.0")
公共类ClaimTask实现可序列化{
@XmlElement(name=“TaskId”,命名空间=”http://schemas.business.com/notification/workflow/1.0“,必需=真)
受保护列表任务ID;
公共列表getTaskId(){
if(taskId==null){
taskId=newarraylist();
}
返回此.taskId;
}
public void setTaskId(字符串任务\u Id){
if(this.taskId==null){
this.taskId=new ArrayList();
}
this.taskId.add(task\u Id);
}
public void setTaskId(列出任务\u Id){
if(this.taskId==null){
this.taskId=new ArrayList();
}
this.taskId.addAll(task_Id);
}
}

您可以通过实现以下代码来解决和测试web服务

  ClaimTask claim = new com.howtodoinjava.model.ClaimTask();
  claim.setTaskId("002481F0-8E9F-11E3-FB97-B80661C15631");
  claim.setTaskId("002481F0-8E9F-11E3-FB97-B80661C15635");

  StringWriter writer = new StringWriter();
  JAXBContext jaxbContext = JAXBContext.newInstance(ClaimTask.class);
  Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
  jaxbMarshaller.marshal(claim, writer);

 DefaultHttpClient httpClient = new DefaultHttpClient();

 // Define a postRequest request
 HttpPost postRequest = new HttpPost(
"http://localhost:8090/BPMService/v1/tasks/claimTaskObj");

 // Set the API media type in http content-type header
 postRequest.addHeader("SAMLart","XXXXXX");
 postRequest.addHeader("otdsticket","YYYYYYYYYYYYY");
 postRequest.addHeader("content-type", "application/xml");

// Set the request post body
StringEntity userEntity = new StringEntity(writer.getBuffer().toString());
postRequest.setEntity(userEntity);

// Send the request; It will immediately return the response in
// HttpResponse object if any
HttpResponse response = httpClient.execute(postRequest);

// verify the valid error code first
int statusCode = response.getStatusLine().getStatusCode();

尝试将此添加到您尝试反序列化的类中,@JsonIgnoreProperties(ignoreUnknown=true)这是一个必填字段,我需要该字段来执行任何进一步的操作。因此,如果我将@JsonIgnoreProperties(ignoreUnknown=true)注释为:(