【发布时间】:2014-11-28 15:59:27
【问题描述】:
我在尝试使用 JAX-RS 解决这个问题时遇到了麻烦,我相信它与编组/解组过程有关(我认为我不太了解),并且我想重新创建这个:
-
发布帖子的 REST 端点是 /rest/register,因此我的服务定义如下:
@ApplicationPath("/rest") public interface RestRegistration { @POST @Path("/register") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) String register(UsernameRegistration usernameAccess, String network) throws RegistrationException; @POST @Path("/register") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) String register(EmailRegistration emailAccess, String network) throws RegistrationException; } public class RestRegistrationImpl implements RestRegistration { public String register(UsernameRegistration usernameAccess, String network) throws RegistrationException { return "StackOverflow example: username=" + usernameAccess.getUser + ", network="+network; } public String register(EmailRegistration emailAccess, String network) throws RegistrationException{ return "StackOverflow example: email=" + emailAccess.getEmail + ", network="+network; } } -
它应该至少接收两个不同的 JSON 消息:
{ "usernameAccess" : { "user" : "AUser", "password" : "APass"}, "network" : "Facebook"}或者...
{ "emailAccess" : { "email" : "AnEmail@domain.com", "password" : "APass"}, "network" : "LinkedIn"} -
类由
表示public abstract class Registration { private Long _id; private String _password; private String _network; // usual getters and setters... } public class UsernameRegistration extends Registration { private String _user; // usual getters and setters... } public class EmailRegistration extends Registration { private String _email; // usual getters and setters... }
所以,我现在的问题是:
- 使用此实现时,我不断收到 HTTP 500 错误。
- 我不确定如何分隔两个 JSON 节点:usernameAccess/emailAccess 和 network。
- 另外:有什么方法可以改进使用“UsernameRegistration”和“EmailRegistration”这两个类都继承自同一个“Registration”这一事实,使“上部”1. 上的类看起来更优雅?
有没有人可以交给我的参考书目、文章或方法? 提前致谢! :)
【问题讨论】:
-
更新:关于我的问题的问题 2,我刚刚发现我不能以我想要的方式在一个 POST 上发送两个不同的对象。解决方案可以在这里找到:stackoverflow.com/questions/5553218/…
-
您能否发布您收到的错误以及来自服务器的任何适用堆栈跟踪?您使用的是什么 JSON 提供程序?
-
@JohnAment:我正在使用杰克逊。错误类似于:(异常)原因:...jackson.map.JsonMappingException:无法构造 ...Registration 的实例,问题:抽象类型只能使用附加类型信息进行实例化。 (谢谢!);)
标签: java json rest jax-rs marshalling