public class User {
private String id;
private String email;
private Address address;
private List<Phone> phones;
// getters & setters
}
public class Address {
private String type;
private String value;
// getters & setters
}
public class Phone {
private String type;
private String value;
// getters & setters
}
@POST
public Response create(User user) {
// some logic
}
现在,当我发送包含以下json数据的POST请求时:
{
"id":"qwe12",
"email":"emailname@g-mail.com",
"address":{
"type":"1WHEN-Honorable",
"value":"1WHEN-M"
},
"phones":[
{
"type":"HOME",
"number":"034-2342-12-31"
},
{
"type":"WORK",
"number":"31-21-3211-32"
}
]
}
它工作得很好,MOXY会自动将这个json映射到用户对象,很好
但我需要使用另一层嵌套来处理json,如下所示:
{
"user":{
"id":"qwe12",
"email":"emailname@g-mail.com",
"address":{
"type":"1WHEN-Honorable",
"value":"1WHEN-M"
},
"phones":[
{
"type":"HOME",
"number":"034-2342-12-31"
},
{
"type":"WORK",
"number":"31-21-3211-32"
}
]
}
}
@POST
public Response create(UserWrapper user) {
// some logic
}
public class UserWrapper {
private User user;
// getters & setters
}
也许不是你要找的答案,但我推荐使用Jackson而不是Moxy。它是一个更成熟的JSON框架,具有更多的特性,而且工作得更好。莫西也许有办法,但这是杰克逊的办法
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22.1</version>
</dependency>
<!-- You need to remember to remove MOXy -->
在ContextResolver
中,配置ObjectMapper
以解包装根值
@Provider
public class MyObjectMapperProvider implements ContextResolver<ObjectMapper> {
final ObjectMapper mapper;
public MyObjectMapperProvider() {
mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return defaultObjectMapper;
}
}
private static ObjectMapper createDefaultMapper() {
return mapper;
}
}
它将查找以反序列化的值将为
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
我目前正在尝试使用Glassfish 4(使用Jersery 2.0和EclipseLink 2.5)解构通过REST PUT提供的JSON对象。 JSON对象由多个属性组成,包括映射到Java枚举的字符串值。 除了有效负载中提供了无效的枚举值外,其他一切都正常工作 JSON对象: 被解组为: 如果JSON负载中的值不是有效的Rating,它当前返回null,这似乎是JAXB忽略转换错误的结果(请
我正在尝试创建一个简单的REST api,我遵循了Jersey网站上的教程:https://jersey.java.net/nonav/documentation/2.0/deployment.html 以下是错误: 原因:javax.servlet.unavailableException:org.eclipse.jetty.servlet.baseholder.doStart(basehold
这并没有改变结果,而不是失败(应该失败),帖子仍然得到响应。我知道这些注释仍然需要一个验证器来验证它们。我是(假的?)在Jboss提供这样一个验证器的印象中。
webresources定义如下。这个类是由NetBeans自动添加的。
JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器? 如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。 因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX
我在我的Jersey(2.7)项目中使用Moxy,基本上只是为了在服务发出响应时将我的对象整理为JSON。它工作得很好,但现在我也在使用ContainerResponseFilter对发出的每个响应进行一些更改,我不确定如何将请求体的内容解组到一个对象中,这是我需要的。 但我不确定是否有可能将它自动转换为一个对象。我需要的信息比较简单,所以我想我可以用另一种方式解析JSON,但我很好奇。 我试过找