Double the URL when using Feign with Spring boot












0















I am little new to Spring boot and I am using Feign Rest client to talk to my web service. But I'm getting my URL double and cannot invoke the intended service.



@FeignClient(name= "exchange-service", url="localhost:8000")


public interface ExchangeServiceProxy {



@GetMapping
@RequestMapping(value = "/exchange/from/{from}/to/{to}")
public ExchangeBean retrieveExchangeValue(@PathVariable("from") String from,
@PathVariable("to") String to);


}



 status 404 reading 
ExchangeServiceProxy#retrieveExchangeValue(String,String); content:
{"timestamp":"2018-11-22T05:50:45.822+0000","status":404,"error":"Not
Found","message":"No message
available","path":"/exchange/from/USD/to/XYZ/exchange/from/USD/to/XYZ"}









share|improve this question



























    0















    I am little new to Spring boot and I am using Feign Rest client to talk to my web service. But I'm getting my URL double and cannot invoke the intended service.



    @FeignClient(name= "exchange-service", url="localhost:8000")


    public interface ExchangeServiceProxy {



    @GetMapping
    @RequestMapping(value = "/exchange/from/{from}/to/{to}")
    public ExchangeBean retrieveExchangeValue(@PathVariable("from") String from,
    @PathVariable("to") String to);


    }



     status 404 reading 
    ExchangeServiceProxy#retrieveExchangeValue(String,String); content:
    {"timestamp":"2018-11-22T05:50:45.822+0000","status":404,"error":"Not
    Found","message":"No message
    available","path":"/exchange/from/USD/to/XYZ/exchange/from/USD/to/XYZ"}









    share|improve this question

























      0












      0








      0








      I am little new to Spring boot and I am using Feign Rest client to talk to my web service. But I'm getting my URL double and cannot invoke the intended service.



      @FeignClient(name= "exchange-service", url="localhost:8000")


      public interface ExchangeServiceProxy {



      @GetMapping
      @RequestMapping(value = "/exchange/from/{from}/to/{to}")
      public ExchangeBean retrieveExchangeValue(@PathVariable("from") String from,
      @PathVariable("to") String to);


      }



       status 404 reading 
      ExchangeServiceProxy#retrieveExchangeValue(String,String); content:
      {"timestamp":"2018-11-22T05:50:45.822+0000","status":404,"error":"Not
      Found","message":"No message
      available","path":"/exchange/from/USD/to/XYZ/exchange/from/USD/to/XYZ"}









      share|improve this question














      I am little new to Spring boot and I am using Feign Rest client to talk to my web service. But I'm getting my URL double and cannot invoke the intended service.



      @FeignClient(name= "exchange-service", url="localhost:8000")


      public interface ExchangeServiceProxy {



      @GetMapping
      @RequestMapping(value = "/exchange/from/{from}/to/{to}")
      public ExchangeBean retrieveExchangeValue(@PathVariable("from") String from,
      @PathVariable("to") String to);


      }



       status 404 reading 
      ExchangeServiceProxy#retrieveExchangeValue(String,String); content:
      {"timestamp":"2018-11-22T05:50:45.822+0000","status":404,"error":"Not
      Found","message":"No message
      available","path":"/exchange/from/USD/to/XYZ/exchange/from/USD/to/XYZ"}






      spring-boot spring-cloud-feign






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 '18 at 5:53









      KeplerKepler

      117213




      117213
























          2 Answers
          2






          active

          oldest

          votes


















          2














          You haven't put your Spring Starter Class in your question. If you are using Feign to client side load balancing @EnableFeignClients is enough to put in your Spring starter class. I think you have put both @GetMapping and @RequestMapping in your ExchangeServiceProxy which is unnecessary. Please remove @GetMapping since you have given the url pattern within the @RequestMapping. This might caused to double your url.



          @FeignClient(name= "exchange-service", url="localhost:8000")
          public interface ExchangeServiceProxy {

          @RequestMapping(value = "/exchange/from/{from}/to/{to}")
          public ExchangeBean retrieveExchangeValue(@PathVariable("from") String
          from,
          @PathVariable("to") String to);
          }


          If you have hard coded like url="localhost:8000" then it will hit only to the instance that is running under the port 8000. It would be ideal to use Ribbon and Eureka naming server to get the full use of client side load balancing if your intention is what I have mentioned.






          share|improve this answer

































            0














            You need to add @EnableFeignClients in main class after @SpringBootApplication Like this:



            @SpringBootApplication
            @ComponentScan
            @EnableScheduling
            @EnableAsync
            @EnableZuulProxy
            @EnableFeignClients
            public class ExampleApplication extends SpringBootServletInitializer{
            public static void main(String args) {
            SpringApplication.run(ExampleApplication.class, args);
            }


            }


            And then Create an Interface for FeignClient like this:



            @FeignClient(name = "service_name", url = "http://localhost:port_to_the_another_application")
            public interface ExampleFeignClient {

            @RequestMapping(value = "/mapping", method = RequestMethod.POST)
            String createUserWallet(@RequestHeader("Authorization") String jwtToken);
            }


            I hope this will help.






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53424653%2fdouble-the-url-when-using-feign-with-spring-boot%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              2














              You haven't put your Spring Starter Class in your question. If you are using Feign to client side load balancing @EnableFeignClients is enough to put in your Spring starter class. I think you have put both @GetMapping and @RequestMapping in your ExchangeServiceProxy which is unnecessary. Please remove @GetMapping since you have given the url pattern within the @RequestMapping. This might caused to double your url.



              @FeignClient(name= "exchange-service", url="localhost:8000")
              public interface ExchangeServiceProxy {

              @RequestMapping(value = "/exchange/from/{from}/to/{to}")
              public ExchangeBean retrieveExchangeValue(@PathVariable("from") String
              from,
              @PathVariable("to") String to);
              }


              If you have hard coded like url="localhost:8000" then it will hit only to the instance that is running under the port 8000. It would be ideal to use Ribbon and Eureka naming server to get the full use of client side load balancing if your intention is what I have mentioned.






              share|improve this answer






























                2














                You haven't put your Spring Starter Class in your question. If you are using Feign to client side load balancing @EnableFeignClients is enough to put in your Spring starter class. I think you have put both @GetMapping and @RequestMapping in your ExchangeServiceProxy which is unnecessary. Please remove @GetMapping since you have given the url pattern within the @RequestMapping. This might caused to double your url.



                @FeignClient(name= "exchange-service", url="localhost:8000")
                public interface ExchangeServiceProxy {

                @RequestMapping(value = "/exchange/from/{from}/to/{to}")
                public ExchangeBean retrieveExchangeValue(@PathVariable("from") String
                from,
                @PathVariable("to") String to);
                }


                If you have hard coded like url="localhost:8000" then it will hit only to the instance that is running under the port 8000. It would be ideal to use Ribbon and Eureka naming server to get the full use of client side load balancing if your intention is what I have mentioned.






                share|improve this answer




























                  2












                  2








                  2







                  You haven't put your Spring Starter Class in your question. If you are using Feign to client side load balancing @EnableFeignClients is enough to put in your Spring starter class. I think you have put both @GetMapping and @RequestMapping in your ExchangeServiceProxy which is unnecessary. Please remove @GetMapping since you have given the url pattern within the @RequestMapping. This might caused to double your url.



                  @FeignClient(name= "exchange-service", url="localhost:8000")
                  public interface ExchangeServiceProxy {

                  @RequestMapping(value = "/exchange/from/{from}/to/{to}")
                  public ExchangeBean retrieveExchangeValue(@PathVariable("from") String
                  from,
                  @PathVariable("to") String to);
                  }


                  If you have hard coded like url="localhost:8000" then it will hit only to the instance that is running under the port 8000. It would be ideal to use Ribbon and Eureka naming server to get the full use of client side load balancing if your intention is what I have mentioned.






                  share|improve this answer















                  You haven't put your Spring Starter Class in your question. If you are using Feign to client side load balancing @EnableFeignClients is enough to put in your Spring starter class. I think you have put both @GetMapping and @RequestMapping in your ExchangeServiceProxy which is unnecessary. Please remove @GetMapping since you have given the url pattern within the @RequestMapping. This might caused to double your url.



                  @FeignClient(name= "exchange-service", url="localhost:8000")
                  public interface ExchangeServiceProxy {

                  @RequestMapping(value = "/exchange/from/{from}/to/{to}")
                  public ExchangeBean retrieveExchangeValue(@PathVariable("from") String
                  from,
                  @PathVariable("to") String to);
                  }


                  If you have hard coded like url="localhost:8000" then it will hit only to the instance that is running under the port 8000. It would be ideal to use Ribbon and Eureka naming server to get the full use of client side load balancing if your intention is what I have mentioned.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 22 '18 at 15:21

























                  answered Nov 22 '18 at 15:14









                  DilanDilan

                  72121018




                  72121018

























                      0














                      You need to add @EnableFeignClients in main class after @SpringBootApplication Like this:



                      @SpringBootApplication
                      @ComponentScan
                      @EnableScheduling
                      @EnableAsync
                      @EnableZuulProxy
                      @EnableFeignClients
                      public class ExampleApplication extends SpringBootServletInitializer{
                      public static void main(String args) {
                      SpringApplication.run(ExampleApplication.class, args);
                      }


                      }


                      And then Create an Interface for FeignClient like this:



                      @FeignClient(name = "service_name", url = "http://localhost:port_to_the_another_application")
                      public interface ExampleFeignClient {

                      @RequestMapping(value = "/mapping", method = RequestMethod.POST)
                      String createUserWallet(@RequestHeader("Authorization") String jwtToken);
                      }


                      I hope this will help.






                      share|improve this answer




























                        0














                        You need to add @EnableFeignClients in main class after @SpringBootApplication Like this:



                        @SpringBootApplication
                        @ComponentScan
                        @EnableScheduling
                        @EnableAsync
                        @EnableZuulProxy
                        @EnableFeignClients
                        public class ExampleApplication extends SpringBootServletInitializer{
                        public static void main(String args) {
                        SpringApplication.run(ExampleApplication.class, args);
                        }


                        }


                        And then Create an Interface for FeignClient like this:



                        @FeignClient(name = "service_name", url = "http://localhost:port_to_the_another_application")
                        public interface ExampleFeignClient {

                        @RequestMapping(value = "/mapping", method = RequestMethod.POST)
                        String createUserWallet(@RequestHeader("Authorization") String jwtToken);
                        }


                        I hope this will help.






                        share|improve this answer


























                          0












                          0








                          0







                          You need to add @EnableFeignClients in main class after @SpringBootApplication Like this:



                          @SpringBootApplication
                          @ComponentScan
                          @EnableScheduling
                          @EnableAsync
                          @EnableZuulProxy
                          @EnableFeignClients
                          public class ExampleApplication extends SpringBootServletInitializer{
                          public static void main(String args) {
                          SpringApplication.run(ExampleApplication.class, args);
                          }


                          }


                          And then Create an Interface for FeignClient like this:



                          @FeignClient(name = "service_name", url = "http://localhost:port_to_the_another_application")
                          public interface ExampleFeignClient {

                          @RequestMapping(value = "/mapping", method = RequestMethod.POST)
                          String createUserWallet(@RequestHeader("Authorization") String jwtToken);
                          }


                          I hope this will help.






                          share|improve this answer













                          You need to add @EnableFeignClients in main class after @SpringBootApplication Like this:



                          @SpringBootApplication
                          @ComponentScan
                          @EnableScheduling
                          @EnableAsync
                          @EnableZuulProxy
                          @EnableFeignClients
                          public class ExampleApplication extends SpringBootServletInitializer{
                          public static void main(String args) {
                          SpringApplication.run(ExampleApplication.class, args);
                          }


                          }


                          And then Create an Interface for FeignClient like this:



                          @FeignClient(name = "service_name", url = "http://localhost:port_to_the_another_application")
                          public interface ExampleFeignClient {

                          @RequestMapping(value = "/mapping", method = RequestMethod.POST)
                          String createUserWallet(@RequestHeader("Authorization") String jwtToken);
                          }


                          I hope this will help.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 22 '18 at 6:07









                          Pawan TiwariPawan Tiwari

                          257116




                          257116






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53424653%2fdouble-the-url-when-using-feign-with-spring-boot%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              MongoDB - Not Authorized To Execute Command

                              How to fix TextFormField cause rebuild widget in Flutter

                              in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith