Dropwizard错误405 HTTP方法POST Json

时间:2014-07-18 15:15:03

标签: java json rest dropwizard

所以,我用Dropwizard获得了这个Web服务应用程序。这是一个简单的post方法:

@Path(OmniURL.USERPATH)
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class UserResource {
    private final UserMobileDao userMobileDao;

public UserResource(UserMobileDao userMobileDao) {
    this.userMobileDao = userMobileDao;
}
@POST
@UnitOfWork
public UserMobile createUserMobile(UserMobile userMobile) {
    userMobile.setCreationDate(new Date()); 
    return userMobileDao.save(userMobile);
    }
}

这是我试图从android应用程序发布的Json :(最近我发布了Postman应用程序,返回相同的错误,并且他的ContentType被正确设置为'application / json'作为标题)< / p>

{"creationDate":null,"email":"dutfp@hotmail.com","facebookProfile":{"email":"dutfp@hotmail.com","id":"679284068825262"},"id":null,"name":"Jack Et","onlineStoreUser":null}

这代表了这个实体:

@Entity
@Table(name = "user_mobile")
public class UserMobile implements Serializable{

    private static final long serialVersionUID = -273822158021109237L;
    @Id
    @SequenceGenerator(name = "seq_user_mobile", sequenceName = "seq_user_mobile", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_user_mobile")
    @Column(name = "user_id")
    private Long id;
    @Column(name = "email", length=30, nullable=false)
    private String email;
    @OneToOne(optional=true)
    private FacebookProfile facebookProfile;
    @Column(name = "creation_date")
    private Date creationDate;
    @OneToOne(fetch=FetchType.LAZY,optional=true)
    private OnlineStoreUser onlineStoreUser;
    @Column(name = "name", length=30, nullable=false)
    private String name;

    ....getters and setters
}

我已经尝试过CORS设置:

  /* e.servlets().addFilter("cors-filter", CrossOriginFilter.class)
    .addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
    */
   Dynamic filter = e.servlets().addFilter("CORS", CrossOriginFilter.class);
    filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
    filter.setInitParameter("allowedOrigins", "*");
    filter.setInitParameter("allowedHeaders", "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
    filter.setInitParameter("allowedMethods", "GET,PUT,POST,DELETE,OPTIONS");
    //filter.setInitParameter("preflightMaxAge", "5184000"); // 2 months
    filter.setInitParameter("allowCredentials", "true");

没有成功......

有趣的是,在创建所有实体及其属性之前,我已经使用名称和电子邮件对UserMobile进行了测试,并且运行良好。所以我认为这是我的一个简单而愚蠢的错误。

1 个答案:

答案 0 :(得分:0)

好的,所以这里的人们不可能解决它。没有足够的信息。

我是Dropwizard的这个设置:

@Override
    public void initialize(Bootstrap<OmnichannelConfiguration> btstrp) {
        btstrp.addBundle(new ConfiguredAssetsBundle("/banana", "/banana"));
        btstrp.addBundle(hibernateBundle);
    }

我真的不知道为什么要使用它。我来自另一个项目。 :P

我的道路是:

@Path(OmniURL.USERPATH)

OmniURL.USERPATH是哪个“/ banana / user”

所以它们不能是相同的路径,我改变了ConfiguredAssetsBundle并且正在工作。 “我的简单和愚蠢的错误”