org.seedstack.seed.rest.internal.hal.HalMessageBodyWriter.java Source code

Java tutorial

Introduction

Here is the source code for org.seedstack.seed.rest.internal.hal.HalMessageBodyWriter.java

Source

/**
 * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org>
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */
package org.seedstack.seed.rest.internal.hal;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.seedstack.seed.rest.hal.HalRepresentation;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

@Provider
public class HalMessageBodyWriter implements MessageBodyWriter<HalRepresentation> {

    @Override
    public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
        return HalRepresentation.class.isAssignableFrom(type) && (mediaType == MediaType.APPLICATION_JSON_TYPE
                || mediaType.equals(new MediaType("application", "hal+json")));
    }

    @Override
    public long getSize(HalRepresentation halRepresentation, Class<?> type, Type genericType,
            Annotation[] annotations, MediaType mediaType) {
        // deprecated by JAX-RS 2.0 and ignored by Jersey runtime
        return -1;
    }

    @Override
    public void writeTo(HalRepresentation halRepresentation, Class<?> type, Type genericType,
            Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders,
            OutputStream entityStream) throws IOException, WebApplicationException {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            entityStream.write(objectMapper.writeValueAsBytes(halRepresentation));
            entityStream.flush();
        } catch (JsonProcessingException e) {
            throw new IllegalStateException(e);
        }
    }
}