Java Jackson Builder模式导致找不到邮件正文读取器

Java Jackson Builder模式导致找不到邮件正文读取器,java,glassfish,jackson,builder,Java,Glassfish,Jackson,Builder,我试图使用Jackson的@JsonDeserializebuilder=类注释示例来支持生成器模式。我试图使用我的对象,但一直遇到错误。然后我从Jackson的网页上复制了这个示例,但它仍然不起作用。 以下是我的示例文件: 数据项 package org.cpicard.finance; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(builder=ExampleBuild

我试图使用Jackson的@JsonDeserializebuilder=类注释示例来支持生成器模式。我试图使用我的对象,但一直遇到错误。然后我从Jackson的网页上复制了这个示例,但它仍然不起作用。 以下是我的示例文件:

数据项

package org.cpicard.finance;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

@JsonDeserialize(builder=ExampleBuilder.class)
public class Example {
   private final int x, y;
   protected Example(int x, int y) {
      this.x = x;
      this.y = y;
   }
}
建筑商

package org.cpicard.finance;
public class ExampleBuilder {
   private int x, y;
   public ExampleBuilder () { }

   public ExampleBuilder withX(int x) {
      this.x = x;
      return this;
   }
   public ExampleBuilder withY(int y) {
      this.y = y;
      return this;
   }

   public Example build() {
      return new Example(x, y);
   }
}
休息服务

package org.cpicard.finance;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.cpicard.model.finance.Example;

@Path("/account")
public class AccountService {

   @POST
   @Consumes(MediaType.APPLICATION_JSON)
   @Path("test1")
   public Response createAccount1(final Example account) {
      System.out.println(account.toString());
      return Response.ok().build();
   }
}
应用程序配置

package org.cpicard.finance;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rs")
public class ApplicationConfig extends Application {

   private final Set<Class<?>> classes;

   public ApplicationConfig() {
      final HashSet<Class<?>> c = new HashSet<>();
      c.add(AccountService.class);

      classes = Collections.unmodifiableSet(c);
   }

   @Override
   public Set<Class<?>> getClasses() {
      return classes;
   }
}
Web xml片段

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>org.cpicard.finance.ApplicationConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rs/*</url-pattern>
 </servlet-mapping>
这将导致以下错误:

[2015-03-01T10:30:19.576-0700][glassfish 4.1][Severy][ [org.glassfish.jersey.message.internal.ReaderInterceptorExecutor] [tid:_ThreadID=31 _ThreadName=http-listener-14][timeMillis: 1425231019576][levelValue:1000][[MessageBodyReader未为找到 媒体类型=应用程序/json,类型=类 org.cpicard.model.finance.Example,genericType=class org.cpicard.model.finance.Example.]]

当我将数据项切换到具有常规getter和setter的标准对象时,效果很好。我认为我的配置中有错误,但不确定可能是什么


使用Glassfish 4.1

粘贴的代码中是否有输入错误:受保护的Dummyint x,int y应在类示例中受保护的Exampleint x,int y?是的,这是一个输入错误,最初我调用示例类dummy,但我将其更改为Example。构造函数在我的项目中受保护,例如intx,inty。