Encode an object in a Serde - error Can not start an object, expecting field name

11 Views Asked by At

I have a not annotated class Chunk and I want to get is serialized in Argonaut. I am therefore creating a Serde:

@Singleton
public class ChunkSerde implements Serde<Chunk> {
    @Override
    public void serialize(
        Encoder encoder,
        EncoderContext context,
        Argument<? extends Chunk> type, Chunk chunk) throws IOException {
        Objects.requireNonNull(chunk, "chunk cannot be null");

        encoder = encoder.encodeObject(type);
        encoder.encodeKey("id"); encoder.encodeString(hex(chunk.fingerprint()));
        encoder.encodeKey("size"); encoder.encodeLong(chunk.size());
    }
}

The controller should return a List:

@Controller("/store")
public class StoreController {

    @Inject
    ChunkStore store;

    @Post("/get") @Produces(MediaType.APPLICATION_JSON)
    public List<Chunk> get(@Body Set<String> ids) {

            ...
            return store.get(bids);
            ...
    }

I am however getting the following error:

    Error encoding object [[Chunk[fingerprint=85cbb892316667c0e167658eebe053175a65ed160d39cfd9f0466e67e90769d2, size=5130], Chunk[fingerprint=4de0b3ebcb377be0ccc89d17332db637cbc8b4952970e35e621e654e2652d0f7, size=784]]] to JSON: Can not start an object, expecting field name (context: Object)
at io.micronaut.http.netty.body.NettyJsonHandler.writeTo(NettyJsonHandler.java:164)
    at io.micronaut.http.server.netty.RoutingInBoundHandler.writeNettyMessageBody(RoutingInBoundHandler.java:367)
    at io.micronaut.http.server.netty.RoutingInBoundHandler.encodeHttpResponse(RoutingInBoundHandler.java:346)
    at io.micronaut.http.server.netty.RoutingInBoundHandler.writeResponse(RoutingInBoundHandler.java:240)
    at io.micronaut.http.server.netty.NettyRequestLifecycle.handleNormal(NettyRequestLifecycle.java:92)
...
Caused by: com.fasterxml.jackson.core.JsonGenerationException: Can not start an object, expecting field name (context: Object)
    at com.fasterxml.jackson.core.JsonGenerator._reportError(JsonGenerator.java:2858)
    at com.fasterxml.jackson.core.json.JsonGeneratorImpl._reportCantWriteValueExpectName(JsonGeneratorImpl.java:292)
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator._verifyValueWrite(UTF8JsonGenerator.java:1184)
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeStartObject(UTF8JsonGenerator.java:378)
    at io.micronaut.serde.jackson.JacksonEncoder.encodeObject(JacksonEncoder.java:105)

Can anyone spot the issue?

0

There are 0 best solutions below