All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.allegro.tech.hermes.management.api.reader.QueryBodyReader Maven / Gradle / Ivy

There is a newer version: 2.10.4
Show newest version
package pl.allegro.tech.hermes.management.api.reader;

import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.MultivaluedMap;
import jakarta.ws.rs.ext.MessageBodyReader;
import jakarta.ws.rs.ext.Provider;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.springframework.beans.factory.annotation.Autowired;
import pl.allegro.tech.hermes.api.Query;
import pl.allegro.tech.hermes.management.infrastructure.query.parser.QueryParser;
import pl.allegro.tech.hermes.management.infrastructure.query.parser.json.JsonQueryParser;

@Provider
public class QueryBodyReader implements MessageBodyReader {

  private final ObjectMapper objectMapper;

  @Autowired
  public QueryBodyReader(ObjectMapper objectMapper) {
    this.objectMapper = objectMapper;
  }

  @Override
  public boolean isReadable(
      Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
    return type == Query.class;
  }

  @Override
  public Query readFrom(
      Class type,
      Type genericType,
      Annotation[] annotations,
      MediaType mediaType,
      MultivaluedMap httpHeaders,
      InputStream entityStream)
      throws IOException, WebApplicationException {

    Class queryType = Object.class;
    if (genericType instanceof ParameterizedType) {
      queryType = (Class) ((ParameterizedType) genericType).getRawType();
    }
    QueryParser parser = new JsonQueryParser(objectMapper);
    return parser.parse(entityStream, queryType);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy