简体   繁体   中英

Jackson does not recognize properties

Im trying to send request to my service method

OperationResult makeOperation(
            @WebParam(name = "ident") @PathParam("ident") String ident,
            @WebParam(name = "templateId") @PathParam("templateId") Long templateId,
            @WebParam(name = "paySystemId") @QueryParam("paySystemId") Integer paySystemId,
            @WebParam(name = "currency") @QueryParam("currency") Integer currency,
            @WebParam(name = "payAmount") @QueryParam("payAmount") Long payAmount,
            @WebParam(name = "payerPhoneNumber") @QueryParam("payerPhoneNumber") String payerPhoneNumber,
            @WebParam(name = "additionalParameters") AdditionalParameters parameters) throws FailureException;

When I create body and put json like {"paySystemId":12312} I see exception:

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "paySystemId" (class com.fib.paynet.classes.TemplateParameters), not marked as ignorable 

I cannot understand why jackson dont like this my request body...

Your JSON is incorrect.

This would be a correctly formatted JSON:

{ "paySystemId" : 12312 }

If that's not the case, here is a quickly built Client/Server that seems to work for me (Test using my client if possible):

MainClient.java

    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response.Status;

    import org.json.JSONObject;

    import com.sun.jersey.api.client.Client;
    import com.sun.jersey.api.client.ClientResponse;
    import com.sun.jersey.api.client.WebResource;

    public class MainClient {

    public static void main(String[] args) {
        new MainClient().start();
    }

    private void start() {
        WebResource webResource = Client.create().resource("http://localhost:8080/rest/test/");

        String param = "{ \"paySystemId\" : 12312 }";

        ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, param);

        readResponse(response);
    }

    private void readResponse(ClientResponse response) {
        int status;
        status = response.getStatus();

        String body;
        body = response.getEntity(String.class);

        if (Status.fromStatusCode(status) == Status.OK) {
            System.out.println("BEGIN OBJECT OUTPUT --");
            System.out.println(body);
            System.out.println("END OBJECT OUTPUT --");
        } else {
            try {
                JSONObject jsonStack = new JSONObject(body);
                JSONObject jsonResponse = new JSONObject(jsonStack.get("response").toString());
                System.out.println("BEGIN ERROR --");
                System.out.println(jsonResponse.toString());
                System.out.println("END ERROR --");
            } catch (Exception e) {
                System.out.println("NON-JSON RESPONSE BODY BEGIN --");
                System.out.println(body);
                System.out.println("NON-JSON RESPONSE BODY END -- \n");
                e.printStackTrace();
            }
        }
    }

}

MainServer.java

import java.net.InetSocketAddress;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

import com.sun.jersey.spi.container.servlet.ServletContainer;

public class MainServer {

    public static void main(String[] args) throws Exception {
        new MainServer().start();
    }

    private void start() throws Exception {
        ServletHolder holder = new ServletHolder(new ServletContainer());
        holder.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig");
        holder.setInitParameter("com.sun.jersey.config.property.packages", "stack.teste");
        holder.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
        holder.setInitOrder(1);

        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setDisplayName("Simple RESTful Jetty Server");
        context.setContextPath("/rest");

        InetSocketAddress address = new InetSocketAddress("localhost", 8080);

        Server server = new Server(address);
        server.setHandler(context);

        context.addServlet(holder, "/*");

        server.start();
    }

}

Service.Java

import javax.jws.WebParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public class Service {

    @POST
    public Response getEntidade(@WebParam(name = "paySystemId") @QueryParam("paySystemId") Integer paySystemId,
            @WebParam(name = "currency") @QueryParam("currency") Integer currency) {
        System.out.println(paySystemId);
        return Response.ok("{\"status\" : 1}").build();
    }

}

paySystemId指定为@QueryParam,因此应在URL的查询字符串中传递,而不是在请求正文中作为json传递。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM