Saltar al contenido

Cómo publicar datos codificados en forma de URL con Spring Cloud Feign

Esta es la solución más válida que te podemos dar, pero estúdiala pausadamente y analiza si es compatible a tu trabajo.

Solución:

Use el codificador de formulario para fingir: https://github.com/OpenFeign/feign-form y su configuración de fingir puede verse así:

class CoreFeignConfiguration 

  @Autowired
  private ObjectFactory messageConverters

  @Bean
  @Primary
  @Scope(SCOPE_PROTOTYPE)
  Encoder feignFormEncoder() 
      new FormEncoder(new SpringEncoder(this.messageConverters))
  

Entonces, el cliente se puede mapear así:

@FeignClient(name = 'client', url = 'localhost:9080', path ='/rest', configuration = CoreFeignConfiguration)
interface CoreClient 

    @RequestMapping(value = '/business', method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED)
    @Headers('Content-Type: application/x-www-form-urlencoded')
    void activate(Map formParams)

Código Java completo con una versión simplificada de la solución kazuar, funciona con Spring Boot:

import java.util.Map;

import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;

@FeignClient(name = "srv", url = "http://s.com", configuration = Client.Configuration.class)
public interface Client 

    @PostMapping(value = "/form", consumes = APPLICATION_FORM_URLENCODED_VALUE)
    void login(@RequestBody Map form);

    class Configuration 

        @Bean
        Encoder feignFormEncoder(ObjectFactory converters) 
            return new SpringFormEncoder(new SpringEncoder(converters));
        
    

Dependencia:


   org.springframework.cloud
   spring-cloud-starter-openfeign

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *