0

I'm creating a POST request to an API, and one of the values in the body is a GString (Groovy String).

            final body = [
                    'webhook': [
                            'topic'  : topic,
                            'address': "${webhookConfig.address}",
                            'format' : 'json'
                    ]
            ]
            entity = new RequestEntity(body, headers, HttpMethod.POST, webhooksUri)
            final createResponse = springRestTemplate.exchange(entity, Map)

I'm receiving an error from the API because the value isn't a String, but an Object.

If I change the address value line to be:

'address': "${webhookConfig.address}".toString(),

It works fine.

I found this gist that creates a custom Jackson serializer, and I see that it's picked up in my Spring context, but it isn't used when RestTemplate serializes the data.

@Component
class GStringJsonSerializer extends StdSerializer<GString> {

    @Autowired
    GStringJsonSerializer(ObjectMapper objectMapper) {
        super(GString)

        def module = new SimpleModule()
        module.addSerializer(GString, this)
        objectMapper.registerModule(module)
    }

    @Override
    void serialize(GString value, JsonGenerator gen, SerializerProvider serializers)
            throws IOException, JsonProcessingException {
        gen.writeString(value.toString())
    }
}

How can I tell RestTemplate to convert Groovy's GString's into just Strings?

Townsfolk
  • 1,282
  • 1
  • 9
  • 21

0 Answers0