我正在尝试制作基于运动衫的网络服务。在这个,如果我使用@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。
答案 0 :(得分:0)
您不需要使用@BeanParam
传递对象作为输入。就这样传递它:
@POST
@Path("register")
@Consumes(MediaType.APPLICATION_JSON)
public Response registerUser(UserForm dto) {
// ...
}
确保包含用于生成/使用json的库。如果客户端是javascript你不需要任何其他东西(只需在表单对象上使用JSON.stringify()
),服务器就会添加一些json库,例如Jackson
编辑:
如果您想坚持@BeanParam
,请查看本教程here。基本上你似乎不需要指定mediatype,因为泽西岛将为你处理。