Jackson によって逆シリアル化される JSON を送信するときに、サブ要素の最後の値が である場合null
、Jackson は逆シリアル化を中止するようです。
悪い:
この JSON を受信者 (以下) に送信すると、逆シリアル化が で停止するため、マップされたContent
オブジェクトは になります。null
image
{"user":{"id":"1", "token":"ABC", "image":null},"content":{"id":"2"}}
良い:
このように送信すると、必要な値が保持されますが、image
オブジェクトはその ID で作成されます。null
Content
{"user":{"id":"1", "image":null, "token":"ABC"},"content":{"id":"2"}}
これは私にはバグのように見えます..?!
シンプルなレシーバー:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Transactional
public Response create(UserContent source) {
UserContent dbResult = manager.create(source);
return Response.status(200)
.entity(dbResult.getId().toString()).build();
}
シリアライザ
public static String objectToString(Object object) {
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"));
Writer strWriter = new StringWriter();
try {
mapper.writeValue(strWriter, object);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
String userDataJSON = strWriter.toString();
return userDataJSON;
}
送信側ですべてをオブジェクトnull
として、または空のオブジェクトとしてシリアル化するように ObjectMapper を設定できますか?""
UserContent
プロパティを持つオブジェクトを上記のメソッドに渡すnull
と、結果の JSON はnull
上記の例のような値になり、リストの最後の項目の値が null の場合、逆シリアル化が中止され、バックエンドで NullPointerExceptions が発生します。
編集 - UserContent クラス:
@Entity
@Table(name = "user_content")
@XmlRootElement
public class UserContent extends org.springframework.data.jpa.domain.AbstractPersistable<Long> {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@Fetch(FetchMode.JOIN)
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "content_post_id", nullable = false)
@Fetch(FetchMode.JOIN)
private Contentcontent;
// more properties...
}
私たちの依存関係:
<properties>
<jersey-version>1.14</jersey-version>
</properties>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey-version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey-version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${jersey-version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>${jersey-version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.jersey-test-framework</groupId>
<artifactId>jersey-test-framework-grizzly2</artifactId>
<version>${jersey-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${jersey-version}</version>
<scope>test</scope>
</dependency>