小编ule*_*jon的帖子

如何在Jersey REST中处理空/空请求有效负载

我有一个使用Jersey编写的RESTful Web服务,如下所示:

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response myAction(RequestObject requestObject) {
    // do some action
}
Run Code Online (Sandbox Code Playgroud)

请求对象只是一个简单的DTO:

public class RequestObject implements Serializable {
    private String theString;

    // Getter for member
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用空请求有效负载执行POST时,我希望RequestObject要么为null,要么theString为null.相反,我得到了这个:

根本原因

java.io.EOFException: No content to map to Object due to end of input
    org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2766)
    org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2682)
    org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308)
    org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
    com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139)
    com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:483)
    com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
    com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:203)
    com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
    com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
    com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)



当我使用看起来像这样的请求有效负载发布时,我得到了所需的结果(theString设置为null):

{}


问题:有没有办法接受空请求有效负载,并在服务器端处理它?

注意:我正在使用泽西提供的POJO支持.

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
</servlet>
Run Code Online (Sandbox Code Playgroud)

java rest jersey

10
推荐指数
1
解决办法
6759
查看次数

在Slick中使用自定义列类型时进行过滤

使用自定义列类型时,我在Slick 2.1.0中查询/过滤时遇到一些困难.我的问题的简化版本:

import scala.slick.driver.MySQLDriver.simple._

sealed class Status(val intValue: Int)
case object Active extends Status(1)
case object Disabled extends Status(2)
case object Deleted extends Status(3)

case class TableMapping(id: Long, status: Status)

class MyTableDefinition(tag: Tag) extends Table[TableMapping](tag, "sometable") {
  implicit val statusColumnType = MappedColumnType.base[Status, Int](statusToInt, intToStatus)

  def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
  def status = column[Status]("STATUS", O.NotNull, O.Default(Active))
  def * = (id, status) <> (TableMapping.tupled, TableMapping.unapply)

  private def statusToInt(s: Status): Int = s.intValue
  private def intToStatus(i: Int): Status = i match { …
Run Code Online (Sandbox Code Playgroud)

scala slick slick-2.0

8
推荐指数
2
解决办法
1544
查看次数

使用Install4J下载并安装其他应用程序

我正在使用Install4J为我的应用程序构建一个安装(让我们称之为MainApp),它运行良好.

为了能够使用MainApp,您还需要安装我的第二个应用程序(让我们称之为SecondApp).

我的问题是这个.有没有办法让Install4J首先安装MainApp,并且作为安装的最后一步下载SecondApp(位于Web服务器上的exe文件)并执行它?

install4j

6
推荐指数
1
解决办法
1475
查看次数

使用Scala 2.9.2中的ListView和Java 7会产生编译错误

我正在开发一个使用scala 2.9.2和java 7的项目.

我要做的是使用scala ListView创建一个GUI.

这是一个小代码片段:

private val listView = new ListView[Document](someList)
.
.
.
for (selectedDocument <- listView.peer.getSelectedValuesList) {
    doSomething(selectedDocument)
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下编译错误:

error: something is wrong (wrong class file?): class JList with type parameters [E] gets applied to arguments [], phase = namer for (selectedDocument <- listView.peer.getSelectedValuesList) {
Run Code Online (Sandbox Code Playgroud)

我猜这是因为在ListView中,peer没有类型参数定义:

override lazy val peer: JList = new JList with SuperMixin
Run Code Online (Sandbox Code Playgroud)

所以问题是:使用Java 7中的scala-swing是否无法使用ListView?

listview scala java-7 scala-2.9

6
推荐指数
1
解决办法
469
查看次数

处理Play框架中的异常

我正在使用play framework(2.3.x)来构建一个restful API.

今天我有一个try/catch块围绕API控制器中的所有api函数,以便能够捕获异常并返回一个通用的"错误json"对象.

例:

def someApiFuntion() = Action { implicit request =>
    try {
        // Do some magic
        Ok(magicResult)
    } catch {
        case e: Exception =>
            InternalServerError(Json.obj("code" -> INTERNAL_ERROR, "message" -> "Server error"))
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有必要在每个api函数中使用try/catch thingy,还是有更好/更通用的方法来解决这个问题?

scala playframework playframework-2.0

4
推荐指数
2
解决办法
1501
查看次数