• 客户端通过Feign发起请求 服务端通过request取 json对象


    @RestController
    @RequestMapping(value = "test")
    public class TestServer {
    
    
        @RequestMapping(value = "/receive", method = {RequestMethod.POST})
        @ApiOperation(value = "存管开户回调")
        @ResponseBody
        public void receive(HttpServletRequest request, HttpServletResponse response) {
            String s = JsonReq(request);
        }
    
    
           //request转json 
        public static String JsonReq(HttpServletRequest request) {
            BufferedReader br;
            StringBuilder sb = null;
            String reqBody = null;
            try {
                br = new BufferedReader(new InputStreamReader(
                        request.getInputStream()));
                String line = null;
                sb = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
                reqBody = URLDecoder.decode(sb.toString(), "UTF-8");
                reqBody = reqBody.substring(reqBody.indexOf("{"));
                request.setAttribute("inputParam", reqBody);
                System.out.println("JsonReq reqBody>>>>>" + reqBody);
                return reqBody;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return "jsonerror";
            }
        }
    }  

    模拟客户端

    @RestController
    @RequestMapping("/feign")
    public class TestFeign {
        @Autowired
        //注入FeignClient服务类
        TestApiService testApiService;
        @RequestMapping("/testClient")
        public void test(HttpServletRequest request){
            HashMap<String, String> map = new HashMap<>();
            map.put("key","value");
            //发起调用
            testApiService.test(map);
        }
    }
    FeignClient服务
    @FeignClient(url = "http://localhost:8080/test/receive", name = "testApiService", primary = false, configuration = FeignConfig.class) @Headers("Accept: application/json") public interface TestApiService { /** * 发送请求 * @return */ @RequestLine("POST /test/receive") @Headers({"Content-Type: application/json","Accept: application/json"}) String testPost(Map<String, String> req); }

    FeignConfig配置类

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.hexin.creditforce.configuration.feign.support.MapFormHttpMessageConverter;
    import feign.Contract;
    import feign.Logger;
    import feign.Retryer;
    import feign.codec.Decoder;
    import feign.codec.Encoder;
    import feign.form.spring.SpringFormEncoder;
    import org.springframework.beans.factory.ObjectFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
    import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
    import org.springframework.cloud.openfeign.support.SpringDecoder;
    import org.springframework.cloud.openfeign.support.SpringEncoder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.MediaType;
    import org.springframework.http.converter.HttpMessageConverter;
    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * feign config
     */
    @Configuration
    public class FeignConfig {
    
        @Autowired
        private ObjectFactory<HttpMessageConverters> messageConverters;
    
        @Bean
        Logger.Level feignLoggerLevel() {
            return Logger.Level.FULL;
        }
    
        @Bean
        public Contract feignContract() {
            return new Contract.Default();
        }
    
        @Bean
        Retryer retryer() {
            return Retryer.NEVER_RETRY;
        }
    
        /**
         * form编码器,实现支持form表单提交
         */
        @Bean
        public Encoder feignFormEncoder() {
            MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper());
            List<HttpMessageConverter<?>> converters = new ArrayList<>();
            for (HttpMessageConverter<?> converter : messageConverters.getObject().getConverters()) {
                if (!(converter instanceof MappingJackson2HttpMessageConverter)) {
                    converters.add(converter);
                }
            }
            converters.add(jacksonConverter);
            converters.add( new MapFormHttpMessageConverter() );
            return new SpringFormEncoder(new SpringEncoder(() -> new HttpMessageConverters(converters)));
        }
    
        @Bean
        public Decoder feignDecoder() {
            MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
            List<MediaType> supportedMediaTypes = new ArrayList<>(  );
            supportedMediaTypes.add( MediaType.ALL );
            converter.setSupportedMediaTypes( supportedMediaTypes );
            ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(converter);
            return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
        }
    
        private ObjectMapper customObjectMapper() {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
            return objectMapper;
        }
    
    }


    pom配置
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
    <groupId>io.github.openfeign.form</groupId>
    <artifactId>feign-form</artifactId>
    </dependency>
    <dependency>
    <groupId>io.github.openfeign.form</groupId>
    <artifactId>feign-form-spring</artifactId>
    </dependency>


  • 相关阅读:
    问题堆栈区39+40
    ListView优化分页优化
    AsyncTask理解- Day36or37
    Activity是如何挂载Pargment的Day35
    BroadcastReceiver和Intetnt的理解 Day34
    深入理解自定义ListView
    手势识别=读取手机联系人=ContentResolver-Day3
    Android本地JUnit Text
    Java——(一)一切都是对象
    SciTE: 中文字符支持问题
  • 原文地址:https://www.cnblogs.com/java-xz/p/10642986.html
Copyright © 2020-2023  润新知