Java 杰克逊不承认财产

Java 杰克逊不承认财产,java,json,jackson,Java,Json,Jackson,我正在尝试向我的服务方法发送请求 OperationResult makeOperation( @WebParam(name = "ident") @PathParam("ident") String ident, @WebParam(name = "templateId") @PathParam("templateId") Long templateId, @WebParam(name = "paySystemId") @

我正在尝试向我的服务方法发送请求

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;
当我创建body并放入类似json的
{“paySystemId”:12312}
时,我看到异常:

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

我无法理解为什么jackson不喜欢我的请求正文…

您的JSON不正确

这将是一个格式正确的JSON:

{ "paySystemId" : 12312 }
如果不是这样,这里有一个快速构建的客户机/服务器,它似乎适合我(如果可能,使用我的客户机进行测试):

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

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

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

}
MainServer.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();
            }
        }
    }

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

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

}
Service.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();
            }
        }
    }

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

}
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传递。

Use:not=test您的json在这里您尝试过将@DefaultValue添加到可选参数吗?您检查过“@QueryParam”是否真的是要使用的正确注释吗?此代码用于调用我的远程方法,我无法更改它,只有call
paySystemId
被指定为
@QueryParam
,因此它应该在URL的查询字符串中传递,而不是在请求正文中作为json传递。看起来像是真的。。。但我认为URL中的查询只用于GET请求。。。。你可以张贴你的答案,我会应用它