বসন্ত বুটে বিশ্রামের জন্য বেস url কীভাবে সেট করবেন?


118

আমি একক বসন্ত বুট প্রকল্পে এমভিসি মিশিয়ে বিশ্রাম দেওয়ার চেষ্টা করছি।

আমি সমস্ত বিশ্রাম নিয়ন্ত্রকগুলির (যেমন উদাহরণস্বরূপ.com/api) একক স্থানে বেস পথ নির্ধারণ করতে চাই (আমি প্রতিটি কন্ট্রোলারের @RequestMapping('api/products')পরিবর্তে, কেবল উল্লেখ করতে চাই না @RequestMapping('/products')

এমভিসি নিয়ন্ত্রকগণ উদাহরণস্বরূপ / যাই হোক না কেন দ্বারা অ্যাক্সেসযোগ্য হওয়া উচিত

এটা কি সম্ভব?

(আমি স্প্রিং ডেটা বিশ্রাম ব্যবহার করি না, কেবল বসন্তের এমভিসি)



server.servlet.contextPath = / এপিআই
ড্যানিয়েল টি। সোব্রোসা

বসন্ত বুট সংস্করণ ২.১.৪.আরলেএএসই, স্প্রিং.এমভিসি.সারলেট.পথ = / এপিআই এবং সার্ভার.সারলেট.কন্টেক্সট-পাথ = / এপিআই, দুটোই কাজ
প্রয়াগ শর্মা

server.servlet.context-path = / api সমাধানটি কেবলমাত্র বিশ্রামের জন্য নয়, অ্যাপ্লিকেশনটির জন্য। এটি এসওএপি পরিষেবার জন্যও বৈধ। আপনি আপনার সাবান ও বিশ্রাম সেবা পথ sperate করতে চান তাহলে, আপনি @RequestMapping ব্যবহার করা উচিত ( 'API / ...') ... medium.com/@bm.celalkartal/...
bmck

উত্তর:


89

স্প্রিং বুট 1.2+ (<2.0) এর সাথে এটি প্রয়োগ হয় p ব্যক্তিগতভাবে একক সম্পত্তি:

spring.data.rest.basePath=/api

রেফ লিঙ্ক: https://docs.spring.io/spring-data/rest/docs/current/references/html/#getting-st সূত্রের জন্য

2.x এর জন্য, ব্যবহার করুন

server.servlet.context-path=/api

4
থোরিঙ্কর যে সঠিক উত্তর দিয়েছে এটি এটি।
জিন-ফ্রান্সোইস বিউচেফ

8
ধন্যবাদ, তবে এটি আমার জন্য স্প্রিং বুট সংস্করণ v1.5.7.RELEASE এ কাজ করে না। অন্যান্য উত্তর server.contextPath = / API কাজ
জে

10
@ সুরোজ সেই সমাধানটি কেবলমাত্র রিপসিটরিরেষ্টকন্ট্রোলার এনেটেটেড কন্ট্রোলারদের সাথে কাজ করে, রেস্টকন্ট্রোলারের সাথে নয় ...
ন্যানো

jira.spring.io/browse/DATAREST-1211 এই জিরা টিকিটে "স্প্রিং বুট ২.০.০ এর জন্য বসন্ত.ডাটা.রেস্ট.ব্যাস-পাথ" থাকার কথা উল্লেখ করেছে। দুঃখের বিষয়, উভয়ই আমার পক্ষে কাজ করে না।
কার্স্টেন হেগম্যান

6
এসবির জন্য 2+ এটা server.servlet.context-পাথ = / url টি
Vicky

95

কিছুটা দেরি হলেও একই প্রশ্নটি উত্তর পৌঁছে দেওয়ার আগে আমাকে এখানে এনেছে তাই আমি এটি এখানে পোস্ট করছি। একটি অ্যাপ্লিকেশন তৈরি করুন (আপনার এখনও তা না থাকলে) rop

server.contextPath=/api

সুতরাং পূর্ববর্তী উদাহরণে যদি আপনার কাছে রেস্ট কন্ট্রোলার থাকে তবে @RequestMapping("/test")এটির মতো অ্যাক্সেস করতে পারবেনlocalhost:8080/api/test/{your_rest_method}

প্রশ্নের উত্স: আমি কীভাবে আমার বসন্ত বুট ওয়েব অ্যাপের জন্য ইউআরএল চয়ন করব choose


19
আপনি কীভাবে এটি কেবল রেস্টকন্ট্রোলারদের সাথে কাজ করতে এবং "/ এপিআই" ছাড়াই সাধারণ নিয়ন্ত্রকদের অ্যাক্সেসে প্রয়োগ করবেন
সিয়া সোসিবো

@ স্টুটান আমি সমাধান খুঁজে পেয়েছি, আমার উত্তরটি পরীক্ষা করুন :-)
ক্রাভেমির

এটা করবেন না! থোরিঙ্করের উত্তর দেখুন।
স্টিফান

থরিনকরের উত্তর স্প্রিং ডেটা রেস্টের জন্য বিশেষভাবে।

8
সার্ভার.কন্টেক্সটপথটি এখন অবচয় করা হয়েছে, পরিবর্তে সার্ভার.সরলেট.কন্টেক্সট-পাথটি ব্যবহার করুন
ডিএস।

46

বসন্ত বুট ফ্রেমওয়ার্ক সংস্করণের জন্য 2.0.4.RELEASE+। এই লাইনটি যুক্ত করুনapplication.properties

server.servlet.context-path=/api

1
এটি পাবলিক ফোল্ডারটিকেও প্রভাবিত করে :-(
মিশেল

5
এটি স্প্রিং বুট 2+ এর সঠিক উত্তর। spring.data.rest.basePathস্প্রিং বুট 2
jackycflau

27

যেহেতু সমস্যাটির জন্য এটি প্রথম গুগল হিট এবং আমি ধরে নিয়েছি আরও লোকেরা এটি অনুসন্ধান করবে। স্প্রিং বুট '1.4.0' থেকে নতুন বিকল্প রয়েছে। @ রিস্টকন্ট্রোলার দ্বারা বর্ণিত ক্লাসগুলির জন্য একটি পৃথক পথ নির্ধারণ করতে দেয় এমন একটি কাস্টম রিকোয়েস্টম্যাপিংহ্যান্ডলারম্যাপিং সংজ্ঞা দেওয়া এখন সম্ভব

কাস্টম টীকা সহ একটি আলাদা সংস্করণ যা @RestquestMapping এর সাথে @RestController এর সাথে সম্মিলিত হয় এই ব্লগ পোস্টে পাওয়া যাবে

@Configuration
public class WebConfig {

    @Bean
    public WebMvcRegistrationsAdapter webMvcRegistrationsHandlerMapping() {
        return new WebMvcRegistrationsAdapter() {
            @Override
            public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
                return new RequestMappingHandlerMapping() {
                    private final static String API_BASE_PATH = "api";

                    @Override
                    protected void registerHandlerMethod(Object handler, Method method, RequestMappingInfo mapping) {
                        Class<?> beanType = method.getDeclaringClass();
                        if (AnnotationUtils.findAnnotation(beanType, RestController.class) != null) {
                            PatternsRequestCondition apiPattern = new PatternsRequestCondition(API_BASE_PATH)
                                    .combine(mapping.getPatternsCondition());

                            mapping = new RequestMappingInfo(mapping.getName(), apiPattern,
                                    mapping.getMethodsCondition(), mapping.getParamsCondition(),
                                    mapping.getHeadersCondition(), mapping.getConsumesCondition(),
                                    mapping.getProducesCondition(), mapping.getCustomCondition());
                        }

                        super.registerHandlerMethod(handler, method, mapping);
                    }
                };
            }
        };
    }
}

2
স্প্রিং বুট ২.০.০+ এ, সরাসরি ওয়েবএমভিসিআরজিস্টেরেশন ইন্টারফেসটি বন্ধ করুন। ইন্টারফেসে ডিফল্ট পদ্ধতি যুক্ত করার পক্ষে WebMvcRegistrationsAdapter সরানো হয়েছে।
গিলবার্ট অ্যারেনাস ড্যাগার

27

এই আপাতদৃষ্টিতে সহজ প্রশ্নের উত্তর কতটা জটিল তা আমি বিশ্বাস করতে পারি না। এখানে কিছু উল্লেখ রয়েছে:

বিবেচনা করার মতো অনেকগুলি পৃথক বিষয় রয়েছে:

  1. সেট server.context-path=/apiকরে application.propertiesআপনি প্রতিটি কিছুর জন্য একটি উপসর্গটি কনফিগার করতে পারেন Its
  2. স্প্রিং ডাটা কন্ট্রোলার @RepositoryRestController সঙ্গে সটীক সেই বিশ্রামে শেষবিন্দু এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করবে হিসাবে একটি সংগ্রহস্থলের এক্সপোজ spring.data.rest.base-pathমধ্যে application.properties। তবে সরল @RestControllerএটিকে বিবেচনায় নেবে না। বসন্তের ডেটা বিশ্রামের ডকুমেন্টেশন অনুসারে একটি টীকা রয়েছে @BasePathAwareControllerযা আপনি এটির জন্য ব্যবহার করতে পারেন। আমি যখন এই ধরণের একটি নিয়ামককে সুরক্ষিত করার চেষ্টা করি তখন আমার কাছে স্প্রিং-সুরক্ষার সাথে সম্পর্কিত সমস্যা রয়েছে। এটি আর খুঁজে পাওয়া যায় না।

আর একটি কার্যনির্বাহী একটি সহজ কৌশল। আপনি কোনও টীকায় কোনও স্ট্যাটিক স্ট্রিং উপসর্গ করতে পারবেন না, তবে আপনি এই জাতীয় এক্সপ্রেশন ব্যবহার করতে পারেন:

@RestController
public class PingController {

  /**
   * Simple is alive test
   * @return <pre>{"Hello":"World"}</pre>
   */
  @RequestMapping("${spring.data.rest.base-path}/_ping")
  public String isAlive() {
    return "{\"Hello\":\"World\"}";
  }
}

কীভাবে আপনি টীকাতে রাখবেন?
তৈমুরাজ

2
মেহ, তারপরে আপনি সর্বদা নতুন কন্ট্রোলার তৈরি করার সময় এই উপসর্গটি যুক্ত করতে ভুলবেন না
গিলবার্ট অ্যারেনাস ডাগার

13

বুট ২.০.০+ এর জন্য এটি আমার জন্য কাজ করে: server.servlet.context-path = / api


4
এটি সমস্ত কিছুকে / এপিআইয়ের নীচে রাখে বলে মনে হয়, কেবলমাত্র @RestController ম্যাপার্সই নয়। যা হোক ধন্যবাদ. আপনার তথ্য এখনও দরকারী।
eigil

9

আমি একটি পরিষ্কার সমাধান পেয়েছি, যা কেবলমাত্র বিশ্রামকারীদেরকেই প্রভাবিত করে।

@SpringBootApplication
public class WebApp extends SpringBootServletInitializer {

    @Autowired
    private ApplicationContext context;

    @Bean
    public ServletRegistrationBean restApi() {
        XmlWebApplicationContext applicationContext = new XmlWebApplicationContext();
        applicationContext.setParent(context);
        applicationContext.setConfigLocation("classpath:/META-INF/rest.xml");

        DispatcherServlet dispatcherServlet = new DispatcherServlet();
        dispatcherServlet.setApplicationContext(applicationContext);

        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet, "/rest/*");
        servletRegistrationBean.setName("restApi");

        return servletRegistrationBean;
    }

    static public void main(String[] args) throws Exception {
        SpringApplication.run(WebApp.class,args);
    }
}

স্প্রিং বুট দুটি প্রেরণকারী সার্লেটগুলি নিবন্ধভুক্ত করবে - dispatcherServletকন্ট্রোলারের জন্য ডিফল্ট এবং সংজ্ঞায়িত restApiজন্য প্রেরণকারী :@RestControllersrest.xml

2016-06-07 09:06:16.205  INFO 17270 --- [           main] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'restApi' to [/rest/*]
2016-06-07 09:06:16.206  INFO 17270 --- [           main] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]

উদাহরণ rest.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
  http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <context:component-scan base-package="org.example.web.rest"/>
    <mvc:annotation-driven/>

    <!-- Configure to plugin JSON as request and response in method handler -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jsonMessageConverter"/>
            </list>
        </property>
    </bean>

    <!-- Configure bean to convert JSON to POJO and vice versa -->
    <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    </bean>
</beans>

তবে, আপনি সীমাবদ্ধ নন :

  • ব্যবহার করুন XmlWebApplicationContext, আপনি উপলব্ধ যে কোনও প্রসঙ্গ প্রকার ব্যবহার করতে পারেন, যেমন। AnnotationConfigWebApplicationContext, GenericWebApplicationContext, GroovyWebApplicationContext, ...
  • সংশোধন করুন jsonMessageConverter, messageConvertersবিশ্রাম প্রসঙ্গে শিম, তারা পিতামাতার প্রসঙ্গে সংজ্ঞায়িত হতে পারে

এক্সএমএল ব্যবহার না করে এই প্রোগ্রামটিমেটিকভাবে করা কি সম্ভব?
আরিয়ান

@ আরিয়ানহসিনজাদেহ হ্যাঁ প্রোগ্রাম থেকে এটি করা সম্ভব possible বসন্ত প্রসঙ্গে সেটআপ করার অনেকগুলি উপায় রয়েছে। উদাহরণস্বরূপ, আমি দেখিয়েছি কীভাবে REST এপিআই হ্যান্ডলিংয়ের জন্য শিশু প্রসঙ্গ তৈরি করব। জাভাতে কীভাবে প্রসঙ্গ সেটআপ করা যায় তা শিখুন এবং তারপরে এই উত্তরে জ্ঞানের সাথে এই সমন্বয়টি করুন। একে প্রোগ্রামিং বলা হয়।
ক্রাভেমির

7

আপনি আপনার নিয়ন্ত্রকদের জন্য একটি কাস্টম টিকা তৈরি করতে পারেন:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping("/test")
public @interface MyRestController {
}

আপনার নিয়ামক শ্রেণিতে স্বাভাবিক @RestController এর পরিবর্তে এটি ব্যবহার করুন এবং @RequestMapping এর সাথে পদ্ধতিগুলি টিকিয়ে দিন।

সবেমাত্র পরীক্ষিত - স্প্রিং ৪.২ এ কাজ করে!


ধন্যবাদ. আমি এই চেষ্টা করেছি। তবে এখন আমাকে @RequestMapping ("/ product"), @RequestMapping ("/ product / {id}") সহ প্রতিটি পদ্ধতিতে টীকা দিতে হবে। পরিবর্তে আমার কাছে @RequestMapping ("/ product") এবং @RequestMapping, @RequestMapping ("/: id") এর পদ্ধতিগুলি সহ নিয়ন্ত্রক প্রয়োজন। এবং পণ্য নিয়ামক এপিআই / পণ্যগুলিতে অ্যাক্সেসযোগ্য হওয়া উচিত (যেমন একা জায়গায় এপিআই উপসর্গ সেট করুন)
তিমুরজ

2
সেক্ষেত্রে, না, বাক্সের বাইরে কোনও সমাধান নেই, এএফাইক। আপনি নিজের প্রয়োগ করার চেষ্টা করতে পারেন RequestMappingHandlerMapping। স্প্রিং ডাটা বিশ্রাম ম্যাপার আপনার যা প্রয়োজন অনুরূপ আছে - BasePathAwareHandlerMapping
ইলিয়া নোভোসেলটসেভ

@ মোমোরো, আপনি কি সঠিক সমাধান খুঁজে পেয়েছেন? আপনি যদি প্রতিক্রিয়া হিসাবে পোস্ট করতে পারতেন তবে আমি খুশি হব। আমারও এখানে একই চাহিদা রয়েছে।
ফিশারমেট

@ ফিশারমেট, না, আমি ঠিক কী চেয়েছিলাম তা আমি খুঁজে পাইনি, আমি প্রতিটি নিয়ামক শ্রেণীর আগে এবং পরে রিক্যুয়েস্টপ্যাপিং ("/ এপিআই / ব্যবহারকারী") রাখি এবং পদ্ধতির আগে অন্য কোনও @ RequestMapping ( "/ {আইডি}")। তবে আমি মনে করি না এটি একটি বড় সমস্যা, আমি যদি "এপিআই" কিছুতে পরিবর্তন করতে চাই তবে আমি প্রতিটি শ্রেণির শুরুতে এটি পরিবর্তন করব।
তৈমুরাজ

@ ইলিয়া নভোসেল্টসেভ একটি সমাধান আছে, আমার উত্তর দেখুন :-)
ক্রাভেমির

7

আমার কিছুটা দেরি হতে পারে, তবে ... আমি বিশ্বাস করি এটিই সেরা সমাধান। এটি আপনার অ্যাপ্লিকেশন.ইমিতে সেট করুন (বা অ্যানালগিকাল কনফিগারেশন ফাইল):

spring:
    data:
        rest:
            basePath: /api

যেহেতু আমি এটি মনে করতে পারি - আপনার সমস্ত সংগ্রহস্থল এই ইউআরআইয়ের নীচে প্রকাশিত হবে।


আপনি কি এটি কিছুটা ব্যাখ্যা করতে পারেন বা কোনও বিতর্কিত ডকুমেন্টেশনের দিকে নির্দেশ করতে পারেন?
দিমিত্রি Serdiuk


11
পরিবেশগত পরিবর্তনশীলটি spring.data.rest.base-path কেবল বসন্ত-ডেটা-বিশ্রাম এবং স্প্রিং-হেল্পোয়াসকে প্রভাবিত করে। সরল @ রিস্টকন্ট্রোলার এখনও মূলের উপর বসে থাকবে!
রবার্ট

4
@ থিরিঙ্কর আপনি কীসের উপর ভিত্তি করে বলছেন যে বেশিরভাগ ক্ষেত্রে লোকেরা স্প্রিং ডেটা আরএইএসটি সংগ্রহস্থল তৈরি করবে? এবং ওপি স্পষ্টভাবে বলছে যে তার কাছে রেস্ট কন্ট্রোলার রয়েছে ...
জ্যান-ফ্রান্সোইস বিউচেফ

1
আমি মনে করি এটি কেবল তখনই কাজ করবে যদি আপনি স্প্রিংডাটাস্ট ব্যবহার করেন।
জম্মেরে

6

একটি প্যাথম্যাচ কনফিগারার (স্প্রিং বুট 2.x) ব্যবহার করে দেখুন:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer  {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix("api", HandlerTypePredicate.forAnnotation(RestController.class));
    }
}

1
ধন্যবাদ, আমি ঠিক এটিই খুঁজছিলাম! এটি আপনাকে এই ওয়েবএমভিসি কনফিগের মাধ্যমে কনফিগার করা সমস্ত রেস্টকন্ট্রোলারদের জন্য একটি প্রসঙ্গের পথের উপাদান সেট করার অনুমতি দেয়, স্প্রিং.ডাটা.রেস্ট.বেস-পাথের মতো।
বুড়ম্যান

আপনার উত্তরটি @ হ্যারাল্ডওয়েলডে স্পট: +১: আপনার কোডটি ঠিক কী করে (যেমন আমি আমার মন্তব্যে চেষ্টা করার চেষ্টা করেছি) এবং / অথবা এর সাথে লিঙ্কটি ব্যাখ্যা করার মতো আপনি এটির কিছুটা প্রসারিত করে আরও কিছুটা উন্নত করতে পারেন কিছু জাভাদোক বা ডকুমেন্টেশন যা এই ব্যবহারকে বর্ণনা করে।
বুড়ম্যান

এটিই একমাত্র সমাধান যা আমার জন্য কাজ করেছিল কারণ আমি নিয়ামক ইন্টারফেস ব্যবহার করছি
আনাতোলি ইয়াকিমচুক

4

আপনি @RequestMapping("rest")টীকাগুলি সহ একটি বেস শ্রেণি তৈরি করতে পারেন এবং এই বেস শ্রেণীর সাহায্যে আপনার সমস্ত শ্রেণি প্রসারিত করতে পারেন ।

@RequestMapping("rest")
public abstract class BaseController {}

এখন এই ক্লাসটি প্রসারিত সমস্ত শ্রেণিতে অ্যাক্সেসযোগ্য হবে rest/**


3
এটি সঠিক উত্তর নয়, ব্যবহারকারী কন্ট্রোলার টীকাটি উল্লেখ করছেন। যদি আপনি একটি অনুরোধম্যাপিং টীকা সহ একটি বিমূর্ত শ্রেণি প্রসারিত করেন এবং নতুন শ্রেণীর কাছে একটি অনুরোধম্যাপিংও রয়েছে তবে এটি সর্বশেষ প্রথমটিকে ওভাররাইড করবে, এটি দুটিতে সম্মতি জানায় না।
ম্যাসিমো

আপনি কি জানেন যে টীকাগুলি মেটা টিকাতে উত্তরাধিকার সূত্রে না পেলে টীকাগুলি জাভাতে উত্তরাধিকার সূত্রে প্রাপ্ত হয় না? এটি দেখুন: stackoverflow.com/a/21409651 । এবং @ রিকোয়েস্টম্যাপিং-তে মনে হচ্ছে না: ডকস.স্প্রিং.আইও
মাশরুর

3

যাঁরা ওয়াইএএমএল কনফিগারেশন ব্যবহার করেন (অ্যাপ্লিকেশন yamআইএমএল)।

দ্রষ্টব্য : এটি কেবল তার জন্য কাজ করেSpring Boot 2.x.x

server:
  servlet:
    contextPath: /api

আপনি যদি এখনও ব্যবহার করছেন Spring Boot 1.x

server:
  contextPath: /api

1

স্প্রিং-বুট ২.x এর সাহায্যে আপনি অ্যাপ্লিকেশন.প্রেটিটি কনফিগার করতে পারেন:

spring.mvc.servlet.path=/api

1

server.servlet.context-path=/apiসমাধান আমি অনুমান করা হবে। আমার একই সমস্যা ছিল এবং এটি আমার সমাধান পেয়েছে। আমি সার্ভার.কমটেক্সট-পাথ ব্যবহার করেছি। তবে, এটি অবমানিত বলে মনে হয়েছিল এবং আমি খুঁজে পেয়েছি যে server.servlet.context-pathবিষয়টি এখনই সমাধান করে। আমি খুঁজে পাওয়া অন্য একটি কাজটি আমার সামনের প্রান্তে (এইচ 5) পৃষ্ঠাগুলিতে একটি বেস ট্যাগ যুক্ত করা হয়েছিল। আমি আশা করি এটি কাউকে সাহায্য করবে।

চিয়ার্স


0

এই সমাধানটি প্রযোজ্য যদি:

  1. আপনি উপসর্গ করতে চান RestControllerকিন্তু না Controller
  2. আপনি স্প্রিং ডেটা রেস্ট ব্যবহার করছেন না।

    @Configuration
    public class WebConfig extends WebMvcConfigurationSupport {
    
    @Override
    protected RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
        return new ApiAwareRequestMappingHandlerMapping();
    }
    
    private static class ApiAwareRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
    
        private static final String API_PATH_PREFIX = "api";
    
        @Override
        protected void registerHandlerMethod(Object handler, Method method, RequestMappingInfo mapping) {
            Class<?> beanType = method.getDeclaringClass();
            if (AnnotationUtils.findAnnotation(beanType, RestController.class) != null) {
                PatternsRequestCondition apiPattern = new PatternsRequestCondition(API_PATH_PREFIX)
                        .combine(mapping.getPatternsCondition());
    
                mapping = new RequestMappingInfo(mapping.getName(), apiPattern, mapping.getMethodsCondition(),
                        mapping.getParamsCondition(), mapping.getHeadersCondition(), mapping.getConsumesCondition(),
                        mapping.getProducesCondition(), mapping.getCustomCondition());
            }
            super.registerHandlerMethod(handler, method, mapping);
        }
    }

    }

এটি এমএইচ-ডেভ দ্বারা পোস্ট করা সমাধানের মতো , তবে আমি মনে করি এটি একটু পরিষ্কার এবং এটি 2.0.0+ সহ স্প্রিং বুট 1.4.0+ এর যে কোনও সংস্করণে সমর্থন করা উচিত।


আমি যদি আমার রেস্টকন্ট্রোলারে পেজেবল ব্যবহার করি তবে এপিআই / কিছু আমাকে ইন্টারফেসের জন্য কোনও প্রাথমিক বা ডিফল্ট কনস্ট্রাক্টর খুঁজে পায় না org.springframework.data.domain.Pageable
কে

0

প্রতি স্প্রিং ডেটা আরএসটি ডক্স , যদি অ্যাপ্লিকেশন.প্রেটিস ব্যবহার করে তবে আপনার বেসের পথটি নির্ধারণ করতে এই সম্পত্তিটি ব্যবহার করুন:

spring.data.rest.basePath=/api

তবে নোট করুন যে বসন্তটি রিল্যাক্স বন্ডিং ব্যবহার করে , তাই এই প্রকরণটি ব্যবহার করা যেতে পারে:

spring.data.rest.base-path=/api

... বা আপনি যদি এটি পছন্দ করেন তবে:

spring.data.rest.base_path=/api

যদি অ্যাপ্লিকেশন.আইএমএল ব্যবহার করা হয় তবে আপনি কী বিভাজকের জন্য কলোন ব্যবহার করবেন:

spring:
  data:
    rest:
      basePath: /api

(রেফারেন্সের জন্য, ডক্সগুলি স্পষ্ট করতে 2018 সালের মার্চ মাসে একটি সম্পর্কিত টিকিট তৈরি করা হয়েছিল))



0

আপনি আপনার নিয়ন্ত্রকদের জন্য একটি কাস্টম টিকা তৈরি করতে পারেন:

আপনার নিয়ামক শ্রেণিতে স্বাভাবিক @RestController এর পরিবর্তে এটি ব্যবহার করুন এবং @RequestMapping এর সাথে পদ্ধতিগুলি টিকিয়ে দিন।

স্প্রিং 4.2 এ কাজ করে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.