无法使用JSON通过CXF

无法使用JSON通过CXF,json,cxf,jettison,Json,Cxf,Jettison,我正在尝试使用JSON作为输入和输出构建一个CXF RESTFul服务。我正在使用JAXRSServerFactoryBean引导我的服务。当我尝试从客户端程序点击URL时,我得到了以下异常。我的程序非常简单,并附在底部相同 请帮忙 May 19, 2015 11:03:30 PM org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleExceptionStart WARNING: javax.xml.stream.XMLStr

我正在尝试使用JSON作为输入和输出构建一个CXF RESTFul服务。我正在使用JAXRSServerFactoryBean引导我的服务。当我尝试从客户端程序点击URL时,我得到了以下异常。我的程序非常简单,并附在底部相同

请帮忙

May 19, 2015 11:03:30 PM org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleExceptionStart
    WARNING: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[0,0]
    Message: A JSONObject text must begin with '{' at character 0 of 
        at org.codehaus.jettison.mapped.MappedXMLInputFactory.createXMLStreamReader(MappedXMLInputFactory.java:51)
        at org.codehaus.jettison.AbstractXMLInputFactory.createXMLStreamReader(AbstractXMLInputFactory.java:116)
        at org.apache.cxf.jaxrs.provider.json.utils.JSONUtils.createStreamReader(JSONUtils.java:162)
        at org.apache.cxf.jaxrs.provider.json.JSONProvider.createReader(JSONProvider.java:290)
        at org.apache.cxf.jaxrs.provider.json.JSONProvider.createReader(JSONProvider.java:280)
        at org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:233)
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1337)
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1288)
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:824)
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:787)
        at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212)
        at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 

    May 19, 2015 11:03:30 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
WARNING: javax.ws.rs.BadRequestException: HTTP 400 Bad Request
    at org.apache.cxf.jaxrs.utils.SpecExceptions.toBadRequestException(SpecExceptions.java:84)
    at org.apache.cxf.jaxrs.utils.ExceptionUtils.toBadRequestException(ExceptionUtils.java:114)
    at org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleExceptionEnd(AbstractJAXBProvider.java:705)
    at org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleXMLStreamException(AbstractJAXBProvider.java:734)
    at org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:261)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1337)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1288)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:824)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:787)
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212)
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)
    at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:234)
    at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1129)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1065)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[0,0]
Message: A JSONObject text must begin with '{' at character 0 of 
    at org.codehaus.jettison.mapped.MappedXMLInputFactory.createXMLStreamReader(MappedXMLInputFactory.java:51)
    at org.codehaus.jettison.AbstractXMLInputFactory.createXMLStreamReader(AbstractXMLInputFactory.java:116)
    at org.apache.cxf.jaxrs.provider.json.utils.JSONUtils.createStreamReader(JSONUtils.java:162)
    at org.apache.cxf.jaxrs.provider.json.JSONProvider.createReader(JSONProvider.java:290)
RestFulServiceStarter

public class RestFulServiceStarter {
    public static void main(String[] args) {
        JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
        sf.setResourceClasses(ProfileService.class);
        sf.setResourceProvider(ProfileService.class,
                new SingletonResourceProvider(new ProfileServiceImpl()));
        sf.setAddress("http://localhost:9999/");
            Server server = sf.create();
    }
}
@Path("/profile/")
public interface ProfileService {

    @GET
    @Path("/static/")
    @Consumes({ MediaType.APPLICATION_JSON })
    @Produces({ MediaType.APPLICATION_JSON })
    public Response getStaticProfiles(ProfileRequest pr);

}
public class ProfileServiceImpl implements ProfileService {
    public Response getStaticProfiles(ProfileRequest pr) {
        return Response.status(200).entity(pr).build();
    }
}
档案服务

public class RestFulServiceStarter {
    public static void main(String[] args) {
        JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
        sf.setResourceClasses(ProfileService.class);
        sf.setResourceProvider(ProfileService.class,
                new SingletonResourceProvider(new ProfileServiceImpl()));
        sf.setAddress("http://localhost:9999/");
            Server server = sf.create();
    }
}
@Path("/profile/")
public interface ProfileService {

    @GET
    @Path("/static/")
    @Consumes({ MediaType.APPLICATION_JSON })
    @Produces({ MediaType.APPLICATION_JSON })
    public Response getStaticProfiles(ProfileRequest pr);

}
public class ProfileServiceImpl implements ProfileService {
    public Response getStaticProfiles(ProfileRequest pr) {
        return Response.status(200).entity(pr).build();
    }
}
ProfileServiceImpl

public class RestFulServiceStarter {
    public static void main(String[] args) {
        JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
        sf.setResourceClasses(ProfileService.class);
        sf.setResourceProvider(ProfileService.class,
                new SingletonResourceProvider(new ProfileServiceImpl()));
        sf.setAddress("http://localhost:9999/");
            Server server = sf.create();
    }
}
@Path("/profile/")
public interface ProfileService {

    @GET
    @Path("/static/")
    @Consumes({ MediaType.APPLICATION_JSON })
    @Produces({ MediaType.APPLICATION_JSON })
    public Response getStaticProfiles(ProfileRequest pr);

}
public class ProfileServiceImpl implements ProfileService {
    public Response getStaticProfiles(ProfileRequest pr) {
        return Response.status(200).entity(pr).build();
    }
}
档案请求

@XmlRootElement ( name = "profile" )
public class ProfileRequest {

    private String name="";

    private String country=""; 

    private String region="";

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }

    public String getRegion() {
        return region;
    }
    public void setRegion(String region) {
        this.region = region;
    }

}

您的接口方法使用@GET方法进行注释,但它也有一个实体参数(ProfileRequest)。试试@POST