From a7952d7092eb4d9815f3bbae6aeeb8a3e24b6332 Mon Sep 17 00:00:00 2001 From: Emily Burns Date: Mon, 1 Jul 2019 17:34:03 -0700 Subject: [PATCH] fix(json): json is returned as the default for controllers (#842) --- .../spinnaker/gate/config/GateConfig.groovy | 23 +++++++++----- .../converters/JsonHttpMessageConverter.java | 31 +++++++++++++++++++ .../YamlHttpMessageConverter.java | 10 +++--- 3 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 gate-web/src/main/groovy/com/netflix/spinnaker/gate/converters/JsonHttpMessageConverter.java rename gate-web/src/main/groovy/com/netflix/spinnaker/gate/{yaml => converters}/YamlHttpMessageConverter.java (76%) diff --git a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/config/GateConfig.groovy b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/config/GateConfig.groovy index aa7b0592c2..31e403e646 100644 --- a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/config/GateConfig.groovy +++ b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/config/GateConfig.groovy @@ -28,6 +28,8 @@ import com.netflix.spinnaker.fiat.shared.FiatService import com.netflix.spinnaker.fiat.shared.FiatStatus import com.netflix.spinnaker.filters.AuthenticatedRequestFilter import com.netflix.spinnaker.gate.config.PostConnectionConfiguringJedisConnectionFactory.ConnectionPostProcessor +import com.netflix.spinnaker.gate.converters.JsonHttpMessageConverter +import com.netflix.spinnaker.gate.converters.YamlHttpMessageConverter import com.netflix.spinnaker.gate.filters.CorsFilter import com.netflix.spinnaker.gate.filters.GateOriginValidator import com.netflix.spinnaker.gate.filters.OriginValidator @@ -35,7 +37,6 @@ import com.netflix.spinnaker.gate.retrofit.EurekaOkClient import com.netflix.spinnaker.gate.retrofit.Slf4jRetrofitLogger import com.netflix.spinnaker.gate.services.EurekaLookupService import com.netflix.spinnaker.gate.services.internal.* -import com.netflix.spinnaker.gate.yaml.YamlHttpMessageConverter import com.netflix.spinnaker.kork.dynamicconfig.DynamicConfigService import com.netflix.spinnaker.kork.web.selector.DefaultServiceSelector import com.netflix.spinnaker.kork.web.selector.SelectableService @@ -56,7 +57,6 @@ import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Primary import org.springframework.core.Ordered -import org.springframework.http.MediaType import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer import org.springframework.session.data.redis.config.ConfigureRedisAction @@ -141,13 +141,22 @@ class GateConfig extends RedisHttpSessionConfiguration { @Autowired ServiceConfiguration serviceConfiguration + /** + * This needs to be before the yaml converter in order for json to be the default + * response type. + */ + @Bean + AbstractJackson2HttpMessageConverter jsonHttpMessageConverter() { + ObjectMapper objectMapper = new ObjectMapper() + .enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + + return new JsonHttpMessageConverter(objectMapper) + } + @Bean AbstractJackson2HttpMessageConverter yamlHttpMessageConverter() { - return new YamlHttpMessageConverter( - new YAMLMapper(), - MediaType.parseMediaType("application/x-yaml"), - MediaType.parseMediaType("application/x-yaml;charset=UTF-8") - ) + return new YamlHttpMessageConverter(new YAMLMapper()) } @Bean diff --git a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/converters/JsonHttpMessageConverter.java b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/converters/JsonHttpMessageConverter.java new file mode 100644 index 0000000000..c5f378c859 --- /dev/null +++ b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/converters/JsonHttpMessageConverter.java @@ -0,0 +1,31 @@ +/* + * + * Copyright 2019 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package com.netflix.spinnaker.gate.converters; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter; + +public class JsonHttpMessageConverter extends AbstractJackson2HttpMessageConverter { + public JsonHttpMessageConverter(ObjectMapper objectMapper) { + super( + objectMapper, + MediaType.parseMediaType("application/json"), + MediaType.parseMediaType("application/json;charset=UTF-8")); + } +} diff --git a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/yaml/YamlHttpMessageConverter.java b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/converters/YamlHttpMessageConverter.java similarity index 76% rename from gate-web/src/main/groovy/com/netflix/spinnaker/gate/yaml/YamlHttpMessageConverter.java rename to gate-web/src/main/groovy/com/netflix/spinnaker/gate/converters/YamlHttpMessageConverter.java index 2381ca6b60..e390737e3e 100644 --- a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/yaml/YamlHttpMessageConverter.java +++ b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/converters/YamlHttpMessageConverter.java @@ -15,15 +15,17 @@ * limitations under the License. * */ -package com.netflix.spinnaker.gate.yaml; +package com.netflix.spinnaker.gate.converters; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.http.MediaType; import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter; public class YamlHttpMessageConverter extends AbstractJackson2HttpMessageConverter { - - public YamlHttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes) { - super(objectMapper, supportedMediaTypes); + public YamlHttpMessageConverter(ObjectMapper objectMapper) { + super( + objectMapper, + MediaType.parseMediaType("application/x-yaml"), + MediaType.parseMediaType("application/x-yaml;charset=UTF-8")); } }