package org.jsondoc.springmvc.scanner.builder; import java.lang.reflect.Method; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; public class SpringConsumesBuilder { /** * From Spring's documentation: [consumes is] supported at the type level as well as at the method level! * When used at the type level, all method-level mappings override this consumes restriction. * @param method * @param controller * @return */ public static Set<String> buildConsumes(Method method) { Set<String> consumes = new LinkedHashSet<String>(); Class<?> controller = method.getDeclaringClass(); if (controller.isAnnotationPresent(RequestMapping.class)) { RequestMapping requestMapping = controller.getAnnotation(RequestMapping.class); if (requestMapping.consumes().length > 0) { consumes.addAll(Arrays.asList(requestMapping.consumes())); } } if (method.isAnnotationPresent(RequestMapping.class)) { RequestMapping requestMapping = method.getAnnotation(RequestMapping.class); if (requestMapping.consumes().length > 0) { consumes.clear(); consumes.addAll(Arrays.asList(requestMapping.consumes())); } } if(consumes.isEmpty()) { consumes.add(MediaType.APPLICATION_JSON_VALUE); } return consumes; } }