Ari*_*Ari 7 java json cxf jax-rs jackson
我在CXF中使用Jackson来序列化/反序列化数据.不幸的是,我很难配置CXF/Jackson来反序列化JSON数组.我很感激帮助解决这个问题.
到目前为止,大多数json数据都是对象格式,即
{ "objectCollection": [ {...}, {...}, {...}... ] }
但是,有问题的json数据的形式如下:
[ {...}, {...}, {...} ]
Web服务端点需要一个"GroupsDto"对象(请参阅下文),该对象具有单个属性 - 一组组,通过JSON数组传输.
@PATH(...)
public Response createGroups(GroupsDto groups) {
...
}
Run Code Online (Sandbox Code Playgroud)
我将@JsonDeserialize如下添加到GroupsDto集合属性中,但它不起作用.我继续得到:"无法将GroupsDto的实例反序列化为START_ARRAY标记"
public class GroupsDto {
private Collection<GroupDto> groups;
/**
* @return the groups
*/
@XmlElement(name="group")
@JsonDeserialize(contentAs=GroupDto.class)
public Collection<GroupDto> getGroups() {
return groups;
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果json数据的形式如下:
[ {...}, {...}, {...} ]
Run Code Online (Sandbox Code Playgroud)
你必须使用添加另一个类说'wrapper':
@JsonIgnoreProperties(ignoreUnknown = true)
public class ListDto extends ArrayList<GroupDto> {
public ListDto() {
}
}
Run Code Online (Sandbox Code Playgroud)
在取消选择时使用这个类.这种方法对我有用.
您只需要在setter@JsonDeserialize(contentAs=GroupDto.class)中指定。序列化始终处于get状态,反序列化始终处于set 状态,或者如果您愿意,可以在字段上同时指定两者。
代码示例:
import java.io.IOException;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
public class JacksonDeserialize {
public static class ModelClass {
private String name;
public ModelClass() {
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public ModelClass(final String name) {
super();
this.name = name;
}
@Override
public String toString() {
return "ModelClass [name=" + name + "]";
}
}
public static class ListModelClass {
private List<ModelClass> list;
@JsonDeserialize(contentAs = ModelClass.class)
public void setList(final List<ModelClass> list) {
this.list = list;
}
@Override
public String toString() {
return "ListModelClass [list=" + list + "]";
}
}
public static void main(final String[] args) throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
System.out.println(objectMapper.readValue("{\"list\":[{\"name\":\"name1\"},{\"name\":\"name2\"}]}",
ListModelClass.class));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12175 次 |
| 最近记录: |