@BeanParam给出异常未找到Java类的消息体读取器

时间:2015-07-17 01:01:25

标签: rest jersey

我正在尝试制作基于运动衫的网络服务。在这个,如果我使用@FormParam输入参数,它工作正常:

@POST
@Consumes({MediaType.TEXT_PLAIN, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_HTML, "application/x-www-form-urlencoded"})
@Path("/registeruser")
public Response registerUser(@FormParam ("email") String email,@FormParam ("name") String name ){
    System.out.println("Inside register device");
    System.out.println("registered" + email);
    return null;
}

但是当我尝试使用@BeanParam它不起作用并给我一个例外

@POST
@Consumes({MediaType.TEXT_PLAIN, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_HTML, "application/x-www-form-urlencoded"})
@Path("/registeruser")
public Response registerUser(@BeanParam UserForm userForm ){
    System.out.println("Inside register device");
    service.registerUser(userForm);
    System.out.println("registered" + userForm.getEmail());
    return null;
}

未找到Java类com.stc.dms.forms.UserForm的消息正文阅读器和Java类型类com.stc.dms.forms.UserForm,以及MIME媒体类型application / octet-stream。

1 个答案:

答案 0 :(得分:0)

您不需要使用@BeanParam传递对象作为输入。就这样传递它:

@POST
@Path("register")
@Consumes(MediaType.APPLICATION_JSON)
public Response registerUser(UserForm dto) {
  // ...
}

确保包含用于生成/使用json的库。如果客户端是javascript你不需要任何其他东西(只需在表单对象上使用JSON.stringify()),服务器就会添加一些json库,例如Jackson

编辑: 如果您想坚持@BeanParam,请查看本教程here。基本上你似乎不需要指定mediatype,因为泽西岛将为你处理。