我有一个json字符串,我应该deSerialize到下面的类
class Data <T> {
int found;
Class<T> hits
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?这是通常的方式
mapper.readValue(jsonString, Data.class);
Run Code Online (Sandbox Code Playgroud)
但我如何提及T代表什么?
如何根据一个简单的模式(如"dd-MM-yyyy")让杰克逊序列化我的Joda DateTime对象?
我试过了:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
Run Code Online (Sandbox Code Playgroud)
谢谢!
对于java.util.Date,当我这样做
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
private Date dateOfBirth;
Run Code Online (Sandbox Code Playgroud)
然后在我发送的JSON请求中
{ {"dateOfBirth":"01/01/2000"} }
Run Code Online (Sandbox Code Playgroud)
有用.
我应该如何为Java 8的LocalDate字段执行此操作?
我试过了
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate dateOfBirth;
Run Code Online (Sandbox Code Playgroud)
它没用.
有人可以让我知道这是正确的方法吗?
以下是依赖项
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.9.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.3.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 简而言之,我的一个实体有一个GeometryCollection,当你调用"getBoundary"时会抛出一个异常(为什么这是另一本书,现在让我们说这就是它的工作方式).
有没有办法告诉杰克逊不要包括那个特定的吸气剂?我知道当我拥有/控制代码时我可以使用@JacksonIgnore.但事实并非如此,杰克逊通过连续序列化父对象来达到这一点.我在jackson文档中看到了一个过滤选项.这是一个看似合理的解决方案吗?
谢谢!
我正在尝试POST一个List自定义对象.请求正文中的我的JSON是这样的:
{
"collection": [
{
"name": "Test order1",
"detail": "ahk ks"
},
{
"name": "Test order2",
"detail": "Fisteku"
}
]
}
Run Code Online (Sandbox Code Playgroud)
处理请求的服务器端代码:
import java.util.Collection;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path(value = "/rest/corder")
public class COrderRestService {
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response postOrder(Collection<COrder> orders) {
StringBuilder stringBuilder = new StringBuilder();
for (COrder c : orders) {
stringBuilder.append(c.toString());
}
System.out.println(stringBuilder);
return Response.ok(stringBuilder, MediaType.APPLICATION_JSON).build();
}
}
Run Code Online (Sandbox Code Playgroud)
实体COrder:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class …Run Code Online (Sandbox Code Playgroud) 我有两个Java类,我想使用Jackson序列化为JSON:
public class User {
public final int id;
public final String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
}
public class Item {
public final int id;
public final String itemNr;
public final User createdBy;
public Item(int id, String itemNr, User createdBy) {
this.id = id;
this.itemNr = itemNr;
this.createdBy = createdBy;
}
}
Run Code Online (Sandbox Code Playgroud)
我想将Item序列化为此JSON:
{"id":7, "itemNr":"TEST", "createdBy":3}
Run Code Online (Sandbox Code Playgroud)
用户序列化只包括id.我还可以将所有用户对象serilize为JSON,如:
{"id":3, "name": "Jonas", "email": "jonas@example.com"}
Run Code Online (Sandbox Code Playgroud)
所以我想我需要编写一个自定义序列化器Item并尝试使用它:
public class ItemSerializer …Run Code Online (Sandbox Code Playgroud) 我正在将我的JSON库从org.json更改为Jackson,我想迁移以下代码:
JSONObject datasets = readJSON(new URL(DATASETS));
JSONArray datasetArray = datasets.getJSONArray("datasets");
Run Code Online (Sandbox Code Playgroud)
现在在杰克逊我有以下内容:
ObjectMapper m = new ObjectMapper();
JsonNode datasets = m.readTree(new URL(DATASETS));
ArrayNode datasetArray = (ArrayNode)datasets.get("datasets");
Run Code Online (Sandbox Code Playgroud)
但是我不喜欢那里的演员,是否有可能ClassCastException?是否有一个等效的方法getJSONArray,org.json以便我有适当的错误处理,以防它不是一个数组?
当使用Jackson(de)序列化对象时,我试图在Java对象中包含原始JSON.为了测试这个功能,我写了以下测试:
public static class Pojo {
public String foo;
@JsonRawValue
public String bar;
}
@Test
public void test() throws JsonGenerationException, JsonMappingException, IOException {
String foo = "one";
String bar = "{\"A\":false}";
Pojo pojo = new Pojo();
pojo.foo = foo;
pojo.bar = bar;
String json = "{\"foo\":\"" + foo + "\",\"bar\":" + bar + "}";
ObjectMapper objectMapper = new ObjectMapper();
String output = objectMapper.writeValueAsString(pojo);
System.out.println(output);
assertEquals(json, output);
Pojo deserialized = objectMapper.readValue(output, Pojo.class);
assertEquals(foo, deserialized.foo);
assertEquals(bar, deserialized.bar);
}
Run Code Online (Sandbox Code Playgroud)
代码输出以下行:
{"foo":"one","bar":{"A":false}}
Run Code Online (Sandbox Code Playgroud)
JSON正是我想要看的东西.不幸的是,在尝试将JSON读回到对象时,代码失败并出现异常.这是一个例外:
org.codehaus.jackson.map.JsonMappingException:无法在[来源:java.io.StringReader@d70d7a;中的START_OBJECT标记中反序列化java.lang.String的实例.line:1,column:13](通过参考链:com.tnal.prism.cobalt.gather.testing.Pojo …
我想使用jackson json库作为通用方法,如下所示:
public MyRequest<T> tester() {
TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();
MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
return requestWrapper.getRequest();
}
Run Code Online (Sandbox Code Playgroud)
...
public class MyWrapper<T> {
private MyRequest<T> request;
public MyRequest<T> getRequest() {
return request;
}
public void setRequest(MyRequest<T> request) {
this.request = request;
}
}
public class MyRequest{
private List<T> myobjects;
public void setMyObjects(List<T> ets) {
this.myobjects = ets;
}
@NotNull
@JsonIgnore
public T getMyObject() {
return myobjects.get(0);
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我调用请求对象内的getMyObject()时,jackson将嵌套的自定义对象作为LinkedHashMap返回.有没有什么方法可以指定需要返回T对象?例如:如果我发送了Customer类型的对象,那么应该从该列表返回Customer?
谢谢.
我在杰克逊的自定义反序列化器中遇到了问题.我想访问默认的序列化程序来填充我反序列化的对象.在人口之后,我将做一些自定义的事情,但首先我想用默认的jackson行为反序列化对象.
这是我目前的代码.
public class UserEventDeserializer extends StdDeserializer<User> {
private static final long serialVersionUID = 7923585097068641765L;
public UserEventDeserializer() {
super(User.class);
}
@Override
@Transactional
public User deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
User deserializedUser = null;
deserializedUser = super.deserialize(jp, ctxt, new User());
// The previous line generates an exception java.lang.UnsupportedOperationException
// Because there is no implementation of the deserializer.
// I want a way to access the default spring deserializer for my …Run Code Online (Sandbox Code Playgroud)