簡體   English   中英

REST Web服務-映射到Java Complex對象的JSON請求

[英]REST Web service - JSON request mapping to a java Complex object

我正在嘗試將JSON映射並發送到Java對象以進行Rest Web Service。 我正在使用帶有Jersey Java的RESTful WS。

我是這個REST的新手,如果發送不正確,請更正我。

**這是My JSON的示例:

Google Rest插件中作為原始數據的MY Json輸入是:** 我正在使用Google Advance Rest Client呼叫和測試我的Rest Service。 如下

JSON輸入:我需要將其映射到:com.cordys.entity.bean.ClaimTask ClaimTaskObj

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

================================================== ============================== 我遇到了以下錯誤:

因此,每次我發送此請求時,都會出現以下錯誤:

com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException嚴重:無法將MappableContainerException中包含的異常映射到響應,重新拋出到HTTP容器org.codehaus.jackson.map.exc.UnrecognizedPropertyException:無法識別的字段“ taskId ”(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上的org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)上的org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)。 org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1365)上的map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659)在org.codehaus.jackson.map.deser.BeanDeserializer處。 org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.deserialize(BeanDeserializer.java:580)上的_handleUnknown(BeanDeserializer.java:725)在org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:703)在org.codehaus.jac上的org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704) org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)處的com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy處的kson.map.ObjectMapper.readValue(ObjectMapper.java:1315)。 com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:488)處的com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider $ EntityInjecta的readFrom(JacksonProviderProxy.java:139)

================================================== =============================== 我的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);
    } 

}

我的賈克斯比課程是:

包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);
   }

  }

您可以通過實現以下代碼來解決和測試您的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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM