java - 无法从 Rest 方法发送响应

标签 java rest jersey

这是其余的 ws POST 方法代码:

        @POST 
        @Path("/json/saveuser")
        @Consumes("application/json")
        public ResponseBuilder saveUserJSON(User user) {
            if (save(user)) {
                return Response.status(HttpStatus.SC_OK);
            }
            return Response.status(HttpStatus.SC_BAD_REQUEST);
        }

用户已正确保存在数据库中。

但是行 Response.status(HttpStatus.SC_OK);Response.status(HttpStatus.SC_BAD_REQUEST); 抛出以下错误:

Mar 06, 2015 1:38:49 PM com.sun.jersey.spi.container.ContainerResponse traceException
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.sun.jersey.core.spi.factory.ResponseBuilderImpl, and Java type class javax.ws.rs.core.Response$ResponseBuilder, and MIME media type application/octet-stream was not found
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:278)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1326)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1239)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:684)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class com.sun.jersey.core.spi.factory.ResponseBuilderImpl, and Java type class javax.ws.rs.core.Response$ResponseBuilder, and MIME media type application/octet-stream was not found
    ... 28 more

谷歌搜索过。并根据SO和其他站点中的帖子,添加了如下列出的jar(还为其他依赖项添加了一些额外的jar):

antlr-2.7.7.jar
com.sun.jersey.jersey-core-1.4.0.jar
com.sun.jersey.jersey-server-1.4.0.jar
dom4j-1.6.1.jar
gcm.server.jar
genson-0.98.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
http-core-4.1.jar
jackson-all-1.9.0.jar
jackson-annotations-2.2.2.jar
jackson-core-2.2.2.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-3.1.4.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
jersey-bundle-1.8.jar
jersey-container-servlet-core-2.16.jar
jersey-core-1.15.jar
jersey-json.jar
json_simple-1.1.jar
lucene-core-4.10.4.jar
mysql-connector-java-5.1.31.jar
slf4j-api-1.6.1.jar
xml-apis-1.3.03.jar

不确定我错过了什么?有什么建议吗?

最佳答案

您必须返回 Response 而不是 ResponseBuilder:

@POST 
@Path("/json/saveuser")
@Consumes("application/json")
public Response saveUserJSON(User user) {
    if (save(user)) {
        return Response.status(HttpStatus.SC_OK).build();
    }
        return Response.status(HttpStatus.SC_BAD_REQUEST).build();
}

关于java - 无法从 Rest 方法发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28894692/

相关文章:

java - 将以毫秒为单位的字符串转换为日期对象(JAVA)

json - 如何将选项传递给Rundeck作业Webhook URL

java - Jersey 未验证实体

java - 如何为 listView 上的项目设置绝对位置?

java - Mockito、JUnit 和 Spring

asp.net - 回合制游戏 : Use SignalR or both SignalR and REST API?

java - 尝试用 Java 实现一个简单的 JSON Web 服务

java - MessageBodyProviderNotFoundException : I don't know how retrieve data send

java - Jersey 演示应用程序中的 MediaType.APPLICATION_XML 和 MediaType.APPLICATION_JSON

java - @After 和@AfterStep 的 cucumber 依赖项是什么?