| @@ 22-74 (lines=53) @@ | ||
| 19 | import java.util.stream.Collectors; |
|
| 20 | import java.util.stream.Stream; |
|
| 21 | ||
| 22 | @MappingMethodHandler |
|
| 23 | public class RequestMappingMethodsHandler implements AnnotatedMethodHandler { |
|
| 24 | ||
| 25 | @Override |
|
| 26 | public boolean isSupported(Method method) { |
|
| 27 | return method.isAnnotationPresent(RequestMapping.class); |
|
| 28 | } |
|
| 29 | ||
| 30 | @Override |
|
| 31 | public RequestRepresentation handleRequest(Method method) { |
|
| 32 | return RequestRepresentation.builder() |
|
| 33 | .httpMethod(HttpMethod.resolve(method.getAnnotation(RequestMapping.class) |
|
| 34 | .method()[0].name().toUpperCase())) |
|
| 35 | .path(getPathFromMethod(method)) |
|
| 36 | .headers(combineHeaders( |
|
| 37 | ArrayUtils.addAll(method.getAnnotation(RequestMapping.class).headers(), getRequestMediaHeaders(method)), |
|
| 38 | RequestHeaderParamsExtractor.extractAll(method))) |
|
| 39 | .body(RequestBodyExtractor.extract(method.getParameters())) |
|
| 40 | .requestParameters(RequestParametersExtractor.extractAll( |
|
| 41 | method.getParameters(), |
|
| 42 | method.getAnnotation(RequestMapping.class).path())) |
|
| 43 | .pathParameters(PathParametersExtractor.extractAll(method)) |
|
| 44 | .build(); |
|
| 45 | } |
|
| 46 | ||
| 47 | @Override |
|
| 48 | public String[] getResponseMediaHeaders(Method method) { |
|
| 49 | return Arrays.stream(method.getAnnotation(RequestMapping.class).produces()) |
|
| 50 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 51 | .toArray(String[]::new); |
|
| 52 | } |
|
| 53 | ||
| 54 | private String[] getRequestMediaHeaders(Method method) { |
|
| 55 | return ArrayUtils.addAll( |
|
| 56 | Arrays.stream(method.getAnnotation(RequestMapping.class).consumes()) |
|
| 57 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 58 | .toArray(String[]::new), |
|
| 59 | Arrays.stream(method.getAnnotation(RequestMapping.class).produces()) |
|
| 60 | .map(header -> HttpHeaders.ACCEPT + "=" + header) |
|
| 61 | .toArray(String[]::new)); |
|
| 62 | } |
|
| 63 | ||
| 64 | private String getPathFromMethod(Method method) { |
|
| 65 | RequestMapping annotation = method.getAnnotation(RequestMapping.class); |
|
| 66 | return annotation.path().length == 1 |
|
| 67 | ? annotation.path()[0].split("\\?")[0] |
|
| 68 | : annotation.value()[0].split("\\?")[0]; |
|
| 69 | } |
|
| 70 | ||
| 71 | private static List<Param> combineHeaders(String[] rawHeaders, List<Param> headers) { |
|
| 72 | return Stream |
|
| 73 | .concat(RawHeadersParser.parseAll(rawHeaders).stream(), headers.stream()) |
|
| 74 | .collect(Collectors.toList()); |
|
| 75 | } |
|
| 76 | } |
|
| 77 | ||
| @@ 22-73 (lines=52) @@ | ||
| 19 | import java.util.stream.Collectors; |
|
| 20 | import java.util.stream.Stream; |
|
| 21 | ||
| 22 | @MappingMethodHandler |
|
| 23 | public class PutMappingMethodsHandler implements AnnotatedMethodHandler { |
|
| 24 | ||
| 25 | @Override |
|
| 26 | public boolean isSupported(Method method) { |
|
| 27 | return method.isAnnotationPresent(PutMapping.class); |
|
| 28 | } |
|
| 29 | ||
| 30 | @Override |
|
| 31 | public RequestRepresentation handleRequest(Method method) { |
|
| 32 | return RequestRepresentation.builder() |
|
| 33 | .httpMethod(HttpMethod.PUT) |
|
| 34 | .path(getPathFromMethod(method)) |
|
| 35 | .headers(combineHeaders( |
|
| 36 | ArrayUtils.addAll(method.getAnnotation(PutMapping.class).headers(), getRequestMediaHeaders(method)), |
|
| 37 | RequestHeaderParamsExtractor.extractAll(method))) |
|
| 38 | .body(RequestBodyExtractor.extract(method.getParameters())) |
|
| 39 | .requestParameters(RequestParametersExtractor.extractAll( |
|
| 40 | method.getParameters(), |
|
| 41 | method.getAnnotation(PutMapping.class).path())) |
|
| 42 | .pathParameters(PathParametersExtractor.extractAll(method)) |
|
| 43 | .build(); |
|
| 44 | } |
|
| 45 | ||
| 46 | @Override |
|
| 47 | public String[] getResponseMediaHeaders(Method method) { |
|
| 48 | return Arrays.stream(method.getAnnotation(PutMapping.class).produces()) |
|
| 49 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 50 | .toArray(String[]::new); |
|
| 51 | } |
|
| 52 | ||
| 53 | private String[] getRequestMediaHeaders(Method method) { |
|
| 54 | return ArrayUtils.addAll( |
|
| 55 | Arrays.stream(method.getAnnotation(PutMapping.class).consumes()) |
|
| 56 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 57 | .toArray(String[]::new), |
|
| 58 | Arrays.stream(method.getAnnotation(PutMapping.class).produces()) |
|
| 59 | .map(header -> HttpHeaders.ACCEPT + "=" + header) |
|
| 60 | .toArray(String[]::new)); |
|
| 61 | } |
|
| 62 | ||
| 63 | private String getPathFromMethod(Method method) { |
|
| 64 | PutMapping annotation = method.getAnnotation(PutMapping.class); |
|
| 65 | return annotation.path().length == 1 |
|
| 66 | ? annotation.path()[0].split("\\?")[0] |
|
| 67 | : annotation.value()[0].split("\\?")[0]; |
|
| 68 | } |
|
| 69 | ||
| 70 | private static List<Param> combineHeaders(String[] rawHeaders, List<Param> headers) { |
|
| 71 | return Stream |
|
| 72 | .concat(RawHeadersParser.parseAll(rawHeaders).stream(), headers.stream()) |
|
| 73 | .collect(Collectors.toList()); |
|
| 74 | } |
|
| 75 | } |
|
| 76 | ||
| @@ 22-73 (lines=52) @@ | ||
| 19 | import java.util.stream.Collectors; |
|
| 20 | import java.util.stream.Stream; |
|
| 21 | ||
| 22 | @MappingMethodHandler |
|
| 23 | public class PatchMappingMethodsHandler implements AnnotatedMethodHandler { |
|
| 24 | ||
| 25 | @Override |
|
| 26 | public boolean isSupported(Method method) { |
|
| 27 | return method.isAnnotationPresent(PatchMapping.class); |
|
| 28 | } |
|
| 29 | ||
| 30 | @Override |
|
| 31 | public RequestRepresentation handleRequest(Method method) { |
|
| 32 | return RequestRepresentation.builder() |
|
| 33 | .httpMethod(HttpMethod.PATCH) |
|
| 34 | .path(getPathFromMethod(method)) |
|
| 35 | .headers(combineHeaders( |
|
| 36 | ArrayUtils.addAll(method.getAnnotation(PatchMapping.class).headers(), getRequestMediaHeaders(method)), |
|
| 37 | RequestHeaderParamsExtractor.extractAll(method))) |
|
| 38 | .body(RequestBodyExtractor.extract(method.getParameters())) |
|
| 39 | .requestParameters(RequestParametersExtractor.extractAll( |
|
| 40 | method.getParameters(), |
|
| 41 | method.getAnnotation(PatchMapping.class).path())) |
|
| 42 | .pathParameters(PathParametersExtractor.extractAll(method)) |
|
| 43 | .build(); |
|
| 44 | } |
|
| 45 | ||
| 46 | @Override |
|
| 47 | public String[] getResponseMediaHeaders(Method method) { |
|
| 48 | return Arrays.stream(method.getAnnotation(PatchMapping.class).produces()) |
|
| 49 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 50 | .toArray(String[]::new); |
|
| 51 | } |
|
| 52 | ||
| 53 | private String[] getRequestMediaHeaders(Method method) { |
|
| 54 | return ArrayUtils.addAll( |
|
| 55 | Arrays.stream(method.getAnnotation(PatchMapping.class).consumes()) |
|
| 56 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 57 | .toArray(String[]::new), |
|
| 58 | Arrays.stream(method.getAnnotation(PatchMapping.class).produces()) |
|
| 59 | .map(header -> HttpHeaders.ACCEPT + "=" + header) |
|
| 60 | .toArray(String[]::new)); |
|
| 61 | } |
|
| 62 | ||
| 63 | private String getPathFromMethod(Method method) { |
|
| 64 | PatchMapping annotation = method.getAnnotation(PatchMapping.class); |
|
| 65 | return annotation.path().length == 1 |
|
| 66 | ? annotation.path()[0].split("\\?")[0] |
|
| 67 | : annotation.value()[0].split("\\?")[0]; |
|
| 68 | } |
|
| 69 | ||
| 70 | private static List<Param> combineHeaders(String[] rawHeaders, List<Param> headers) { |
|
| 71 | return Stream |
|
| 72 | .concat(RawHeadersParser.parseAll(rawHeaders).stream(), headers.stream()) |
|
| 73 | .collect(Collectors.toList()); |
|
| 74 | } |
|
| 75 | } |
|
| 76 | ||
| @@ 22-73 (lines=52) @@ | ||
| 19 | import java.util.stream.Collectors; |
|
| 20 | import java.util.stream.Stream; |
|
| 21 | ||
| 22 | @MappingMethodHandler |
|
| 23 | public class PostMappingMethodsHandler implements AnnotatedMethodHandler { |
|
| 24 | ||
| 25 | @Override |
|
| 26 | public boolean isSupported(Method method) { |
|
| 27 | return method.isAnnotationPresent(PostMapping.class); |
|
| 28 | } |
|
| 29 | ||
| 30 | @Override |
|
| 31 | public RequestRepresentation handleRequest(Method method) { |
|
| 32 | return RequestRepresentation.builder() |
|
| 33 | .httpMethod(HttpMethod.POST) |
|
| 34 | .path(getPathFromMethod(method)) |
|
| 35 | .headers(combineHeaders( |
|
| 36 | ArrayUtils.addAll(method.getAnnotation(PostMapping.class).headers(), getRequestMediaHeaders(method)), |
|
| 37 | RequestHeaderParamsExtractor.extractAll(method))) |
|
| 38 | .body(RequestBodyExtractor.extract(method.getParameters())) |
|
| 39 | .requestParameters(RequestParametersExtractor.extractAll( |
|
| 40 | method.getParameters(), |
|
| 41 | method.getAnnotation(PostMapping.class).path())) |
|
| 42 | .pathParameters(PathParametersExtractor.extractAll(method)) |
|
| 43 | .build(); |
|
| 44 | } |
|
| 45 | ||
| 46 | @Override |
|
| 47 | public String[] getResponseMediaHeaders(Method method) { |
|
| 48 | return Arrays.stream(method.getAnnotation(PostMapping.class).produces()) |
|
| 49 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 50 | .toArray(String[]::new); |
|
| 51 | } |
|
| 52 | ||
| 53 | private String[] getRequestMediaHeaders(Method method) { |
|
| 54 | return ArrayUtils.addAll( |
|
| 55 | Arrays.stream(method.getAnnotation(PostMapping.class).consumes()) |
|
| 56 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 57 | .toArray(String[]::new), |
|
| 58 | Arrays.stream(method.getAnnotation(PostMapping.class).produces()) |
|
| 59 | .map(header -> HttpHeaders.ACCEPT + "=" + header) |
|
| 60 | .toArray(String[]::new)); |
|
| 61 | } |
|
| 62 | ||
| 63 | private String getPathFromMethod(Method method) { |
|
| 64 | PostMapping annotation = method.getAnnotation(PostMapping.class); |
|
| 65 | return annotation.path().length == 1 |
|
| 66 | ? annotation.path()[0].split("\\?")[0] |
|
| 67 | : annotation.value()[0].split("\\?")[0]; |
|
| 68 | } |
|
| 69 | ||
| 70 | private static List<Param> combineHeaders(String[] rawHeaders, List<Param> headers) { |
|
| 71 | return Stream |
|
| 72 | .concat(RawHeadersParser.parseAll(rawHeaders).stream(), headers.stream()) |
|
| 73 | .collect(Collectors.toList()); |
|
| 74 | } |
|
| 75 | } |
|
| 76 | ||
| @@ 22-73 (lines=52) @@ | ||
| 19 | import java.util.stream.Collectors; |
|
| 20 | import java.util.stream.Stream; |
|
| 21 | ||
| 22 | @MappingMethodHandler |
|
| 23 | public class GetMappingMethodsHandler implements AnnotatedMethodHandler { |
|
| 24 | ||
| 25 | @Override |
|
| 26 | public boolean isSupported(Method method) { |
|
| 27 | return method.isAnnotationPresent(GetMapping.class); |
|
| 28 | } |
|
| 29 | ||
| 30 | @Override |
|
| 31 | public RequestRepresentation handleRequest(Method method) { |
|
| 32 | return RequestRepresentation.builder() |
|
| 33 | .httpMethod(HttpMethod.GET) |
|
| 34 | .path(getPathFromMethod(method)) |
|
| 35 | .headers(combineHeaders( |
|
| 36 | ArrayUtils.addAll(method.getAnnotation(GetMapping.class).headers(), getRequestMediaHeaders(method)), |
|
| 37 | RequestHeaderParamsExtractor.extractAll(method))) |
|
| 38 | .body(RequestBodyExtractor.extract(method.getParameters())) |
|
| 39 | .requestParameters(RequestParametersExtractor.extractAll( |
|
| 40 | method.getParameters(), |
|
| 41 | method.getAnnotation(GetMapping.class).path())) |
|
| 42 | .pathParameters(PathParametersExtractor.extractAll(method)) |
|
| 43 | .build(); |
|
| 44 | } |
|
| 45 | ||
| 46 | @Override |
|
| 47 | public String[] getResponseMediaHeaders(Method method) { |
|
| 48 | return Arrays.stream(method.getAnnotation(GetMapping.class).produces()) |
|
| 49 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 50 | .toArray(String[]::new); |
|
| 51 | } |
|
| 52 | ||
| 53 | private String[] getRequestMediaHeaders(Method method) { |
|
| 54 | return ArrayUtils.addAll( |
|
| 55 | Arrays.stream(method.getAnnotation(GetMapping.class).consumes()) |
|
| 56 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 57 | .toArray(String[]::new), |
|
| 58 | Arrays.stream(method.getAnnotation(GetMapping.class).produces()) |
|
| 59 | .map(header -> HttpHeaders.ACCEPT + "=" + header) |
|
| 60 | .toArray(String[]::new)); |
|
| 61 | } |
|
| 62 | ||
| 63 | private String getPathFromMethod(Method method) { |
|
| 64 | GetMapping annotation = method.getAnnotation(GetMapping.class); |
|
| 65 | return annotation.path().length == 1 |
|
| 66 | ? annotation.path()[0].split("\\?")[0] |
|
| 67 | : annotation.value()[0].split("\\?")[0]; |
|
| 68 | } |
|
| 69 | ||
| 70 | private static List<Param> combineHeaders(String[] rawHeaders, List<Param> headers) { |
|
| 71 | return Stream |
|
| 72 | .concat(RawHeadersParser.parseAll(rawHeaders).stream(), headers.stream()) |
|
| 73 | .collect(Collectors.toList()); |
|
| 74 | } |
|
| 75 | } |
|
| 76 | ||
| @@ 22-73 (lines=52) @@ | ||
| 19 | import java.util.stream.Collectors; |
|
| 20 | import java.util.stream.Stream; |
|
| 21 | ||
| 22 | @MappingMethodHandler |
|
| 23 | public class DeleteMappingMethodsHandler implements AnnotatedMethodHandler { |
|
| 24 | ||
| 25 | @Override |
|
| 26 | public boolean isSupported(Method method) { |
|
| 27 | return method.isAnnotationPresent(DeleteMapping.class); |
|
| 28 | } |
|
| 29 | ||
| 30 | @Override |
|
| 31 | public RequestRepresentation handleRequest(Method method) { |
|
| 32 | return RequestRepresentation.builder() |
|
| 33 | .httpMethod(HttpMethod.DELETE) |
|
| 34 | .path(getPathFromMethod(method)) |
|
| 35 | .headers(combineHeaders( |
|
| 36 | ArrayUtils.addAll(method.getAnnotation(DeleteMapping.class).headers(), getRequestMediaHeaders(method)), |
|
| 37 | RequestHeaderParamsExtractor.extractAll(method))) |
|
| 38 | .body(RequestBodyExtractor.extract(method.getParameters())) |
|
| 39 | .requestParameters(RequestParametersExtractor.extractAll( |
|
| 40 | method.getParameters(), |
|
| 41 | method.getAnnotation(DeleteMapping.class).path())) |
|
| 42 | .pathParameters(PathParametersExtractor.extractAll(method)) |
|
| 43 | .build(); |
|
| 44 | } |
|
| 45 | ||
| 46 | @Override |
|
| 47 | public String[] getResponseMediaHeaders(Method method) { |
|
| 48 | return Arrays.stream(method.getAnnotation(DeleteMapping.class).produces()) |
|
| 49 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 50 | .toArray(String[]::new); |
|
| 51 | } |
|
| 52 | ||
| 53 | private String[] getRequestMediaHeaders(Method method) { |
|
| 54 | return ArrayUtils.addAll( |
|
| 55 | Arrays.stream(method.getAnnotation(DeleteMapping.class).consumes()) |
|
| 56 | .map(header -> HttpHeaders.CONTENT_TYPE + "=" + header) |
|
| 57 | .toArray(String[]::new), |
|
| 58 | Arrays.stream(method.getAnnotation(DeleteMapping.class).produces()) |
|
| 59 | .map(header -> HttpHeaders.ACCEPT + "=" + header) |
|
| 60 | .toArray(String[]::new)); |
|
| 61 | } |
|
| 62 | ||
| 63 | private String getPathFromMethod(Method method) { |
|
| 64 | DeleteMapping annotation = method.getAnnotation(DeleteMapping.class); |
|
| 65 | return annotation.path().length == 1 |
|
| 66 | ? annotation.path()[0].split("\\?")[0] |
|
| 67 | : annotation.value()[0].split("\\?")[0]; |
|
| 68 | } |
|
| 69 | ||
| 70 | private static List<Param> combineHeaders(String[] rawHeaders, List<Param> headers) { |
|
| 71 | return Stream |
|
| 72 | .concat(RawHeadersParser.parseAll(rawHeaders).stream(), headers.stream()) |
|
| 73 | .collect(Collectors.toList()); |
|
| 74 | } |
|
| 75 | } |
|
| 76 | ||