इस एप्लिकेशन के पास / त्रुटि के लिए कोई स्पष्ट मानचित्रण नहीं है


108

मैं ट्यूटोरियल करने के लिए maven का उपयोग करता था https://spring.io/guides/gs/uploading-files/
मेरे द्वारा उपयोग किए गए सभी कोड कॉपी किए गए थे।

अनुप्रयोग चल सकता है, लेकिन मुझे त्रुटि मिलती है:

व्हिटेलबेल त्रुटि पृष्ठ इस एप्लिकेशन के पास / त्रुटि के लिए कोई स्पष्ट मानचित्रण नहीं है, इसलिए आप इसे एक गिरावट के रूप में देख रहे हैं। Tue Jun 30 17:24:02 CST 2015 एक अप्रत्याशित त्रुटि थी (प्रकार = नहीं मिला, स्थिति = 404)। कोई संदेश उपलब्ध नहीं है

मेरे द्वारा यह कैसे किया जा सकता है?


अपनी टिप्पणी पोस्ट में जोड़ दी - आप इसे खुद से संपादित कर सकते हैं। अपनी खुद की पोस्ट पर टिप्पणी करने से बेहतर है
अलेक्जेंडर

जवाबों:


137

सुनिश्चित करें कि आपका मुख्य वर्ग अन्य कक्षाओं के ऊपर एक रूट पैकेज में है।

जब आप स्प्रिंग बूट एप्लिकेशन चलाते हैं, (यानी @SpringBootApplication के साथ एनोटेट किया गया वर्ग), स्प्रिंग केवल आपके मुख्य क्लास पैकेज के नीचे की कक्षाओं को स्कैन करेगा।

com
   +- APP
         +- Application.java  <--- your main class should be here, above your controller classes
         |
         +- model
         |   +- user.java
         +- controller
             +- UserController.java

4
ऊपर या उसी स्तर पर?
मार्टिन एरिक

21
मैंने अपने जीवन के लगभग 2 घंटे इस पर लगा दिए!
राकेश

7
कोशिश भी की। फिर भी त्रुटि। कम से कम मुख्य पृष्ठ अर्थात, लोकलहोस्ट: 8080 मुझे टॉमकैट मुखपृष्ठ दिखाना चाहिए, है न? लेकिन वह भी नहीं दिखा रहा है
zulkarnain shah

संकेत के लिए धन्यवाद। मैं एक ग्रहण उपयोगकर्ता हुआ करता था और वहां इस विन्यास की आवश्यकता नहीं थी, लेकिन अब मैं IntelliJ का उपयोग कर रहा हूं और यह बहुत उम्मीद थी।
अरमर बी।

@zulkarnainshah सामान्य tomcat होमपेज एक WAR द्वारा बनाया गया है जो यहां शामिल नहीं है।
थोर्बोजर्न रेवन एंडरसन

61

जब हम स्प्रिंग बूट एप्लिकेशन बनाते हैं तो हम @SpringBootApplicationएनोटेशन के साथ इसे एनोटेट करते हैं। यह एनोटेशन एप्लिकेशन को काम करने के लिए कई अन्य आवश्यक एनोटेशन को 'लपेटता है'। ऐसा ही एक उद्घोष है @ComponentScanएनोटेशन। यह एनोटेशन स्प्रिंग को स्प्रिंग घटकों को देखने और चलाने के लिए एप्लिकेशन को कॉन्फ़िगर करने के लिए कहता है।

आपके एप्लिकेशन वर्ग को आपके पैकेज पदानुक्रम के ऊपर होने की आवश्यकता है, ताकि स्प्रिंग उप-पैकेजों को स्कैन कर सके और अन्य आवश्यक घटकों का पता लगा सके।

package com.test.spring.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

नीचे दिए गए कोड का टुकड़ा काम करता है के रूप में नियंत्रक पैकेज के अंतर्गत है com.test.spring.bootपैकेज

package com.test.spring.boot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @RequestMapping("/")
    public String home(){
        return "Hello World!";
    }
}

नीचे कोड स्निपेट काम नहीं करता है क्योंकि नियंत्रक पैकेज com.test.spring.bootपैकेज के तहत नहीं है

package com.test.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

     @RequestMapping("/")
     public String home(){
         return "Hello World!";
     }
 }

स्प्रिंग बूट प्रलेखन से:

कई स्प्रिंग बूट डेवलपर्स हमेशा अपने मुख्य वर्ग के साथ एनोटेट होते हैं @Configuration, @EnableAutoConfigurationऔर @ComponentScan। चूंकि ये एनोटेशन इतनी बार एक साथ उपयोग किए जाते हैं (विशेषकर यदि आप उपरोक्त सर्वोत्तम प्रथाओं का पालन करते हैं), तो स्प्रिंग बूट एक सुविधाजनक @SpringBootApplicationविकल्प प्रदान करता है ।

@SpringBootApplicationएनोटेशन का उपयोग कर के बराबर है @Configuration, @EnableAutoConfigurationऔर @ComponentScanउनके डिफ़ॉल्ट विशेषताओं के साथ


3
बहुत अच्छी व्याख्या। धन्यवाद
Lova Chittumuri

39

आप इसे ErrorControllerअपने एप्लिकेशन में जोड़कर हल कर सकते हैं । आपके पास त्रुटि नियंत्रक एक दृश्य है जो आपको चाहिए।

मेरे एप्लिकेशन में त्रुटि नियंत्रक नीचे जैसा दिखता है:

import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * Basic Controller which is called for unhandled errors
 */
@Controller
public class AppErrorController implements ErrorController{

    /**
     * Error Attributes in the Application
     */
    private ErrorAttributes errorAttributes;

    private final static String ERROR_PATH = "/error";

    /**
     * Controller for the Error Controller
     * @param errorAttributes
     */
    public AppErrorController(ErrorAttributes errorAttributes) {
        this.errorAttributes = errorAttributes;
    }

    /**
     * Supports the HTML Error View
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH, produces = "text/html")
    public ModelAndView errorHtml(HttpServletRequest request) {
        return new ModelAndView("/errors/error", getErrorAttributes(request, false));
    }

    /**
     * Supports other formats like JSON, XML
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH)
    @ResponseBody
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request));
        HttpStatus status = getStatus(request);
        return new ResponseEntity<Map<String, Object>>(body, status);
    }

    /**
     * Returns the path of the error page.
     *
     * @return the error path
     */
    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }


    private boolean getTraceParameter(HttpServletRequest request) {
        String parameter = request.getParameter("trace");
        if (parameter == null) {
            return false;
        }
        return !"false".equals(parameter.toLowerCase());
    }

    private Map<String, Object> getErrorAttributes(HttpServletRequest request,
                                                   boolean includeStackTrace) {
        RequestAttributes requestAttributes = new ServletRequestAttributes(request);
        return this.errorAttributes.getErrorAttributes(requestAttributes,
                includeStackTrace);
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request
                .getAttribute("javax.servlet.error.status_code");
        if (statusCode != null) {
            try {
                return HttpStatus.valueOf(statusCode);
            }
            catch (Exception ex) {
            }
        }
        return HttpStatus.INTERNAL_SERVER_ERROR;
    }
}

उपरोक्त वर्ग स्प्रिंग्स बेसिकएयरकंट्रोलर वर्ग पर आधारित है ।

आप ErrorControllerइस तरह से ऊपर एक @Configurationफ़ाइल में तुरंत कर सकते हैं :

 @Autowired
 private ErrorAttributes errorAttributes;

 @Bean
 public AppErrorController appErrorController(){return new AppErrorController(errorAttributes);}

आप ErrorAttributesErrorAttributes को लागू करके डिफ़ॉल्ट को ओवरराइड कर सकते हैं । लेकिन ज्यादातर मामलों में DefaultErrorAttributes को पर्याप्त होना चाहिए।


1
BasicErrorControllerकक्षा 404 में आपका लिंक ।
स्टीफन

@ व्यवहारवाद: के लिए लिंक BasicErrorControllerअब और अच्छा नहीं है, क्या आप अपडेट कर सकते हैं?
HDJEMAI

1
इसका लिंक BasicErrorControllerअभी तय है।
स्वयंसिद्ध

15

मेरे मामले में नियंत्रक वर्ग के साथ टिप्पणी की गई थी @Controller। बदल रहा है कि @RestControllerसमस्या को हल करने के लिए। मूल रूप @RestControllerसे @Controller + @ResponseBody या तो उपयोग है @RestController, या प्रत्येक विधि के @Controllerसाथ @ResponseBodyएनोटेशन के साथ।

कुछ उपयोगी नोट यहां: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/


यह काम करता है, लेकिन उदाहरण के अनुसार पूरे इंटरनेट बेसिक कॉन्फ़िगरेशन पर @ कंट्रोलर के साथ काम करना चाहिए। किसी भी शरीर को इस कारण से पता है कि केवल रेस्टकंट्रोलर ही क्यों काम कर रहा है?
सुपरनोवा

अपने वर्ग को एनोटेट करते समय @RestControllerइसके साथ @ResponseBodyएनोटेशन जोड़ा जाता है , लेकिन यदि आप @Controllerएनोटेशन का उपयोग कर रहे हैं , तो आपको इस एनोटेशन को स्वयं जोड़ना होगा।
रॉबिन Keskisarkka

10

मेरे मामले में यह पैकेज की स्थिति के कारण है, जिसका अर्थ है कि नियंत्रक का पैकेज मुख्य वर्ग पैकेज से ऊपर होना चाहिए

अगर मेरा मुख्य वर्ग पैकेज है तो package co.companyname.spring.tutorial;किसी भी नियंत्रक पैकेज को चाहिएpackage co.companyname.spring.tutorial.WHAT_EVER_HERE;

package co.companyname.spring.tutorial; // package for main class
@SpringBootApplication
public class FirstProjectApplication {

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


package co.companyname.spring.tutorial.controllers; // package for controllers 

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController 
public class HelloController { 

@RequestMapping("/hello")  
public String hello() {   
 return "Hello, world"; 
 }}

खत्म कोडिंग प्रेस बूट डैशबोर्ड के बाद

यहां छवि विवरण दर्ज करें

एक आखिरी बात यह सुनिश्चित करने के लिए कि आपका कंट्रोलर मैपिंग कर रहा है या नहीं बस आपको कुछ स्मिलिंग स्मिलियार देखना चाहिए

Mapped "{[/hello]}" onto public java.lang.String co.companyname.spring.tutorial.controllers.HelloController.hello()

खुश कोडिंग


9

यह तब होता है जब एक स्पष्ट त्रुटि पृष्ठ परिभाषित नहीं होता है। त्रुटि पृष्ठ को परिभाषित करने के लिए, दृश्य के साथ / त्रुटि का मानचित्रण बनाएं। एक त्रुटि के मामले में एक स्ट्रिंग मान के नीचे दिए गए कोड मैप्स की तरह।

package com.rumango.controller;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class IndexController implements ErrorController{
    private final static String PATH = "/error";
    @Override
    @RequestMapping(PATH)
    @ResponseBody
    public String getErrorPath() {
        // TODO Auto-generated method stub
        return "No Mapping Found";
    }

}

क्या आप अपने कोड में कुछ स्पष्टीकरण जोड़ सकते हैं? यह प्रश्न क्यों हल करता है, जो महत्वपूर्ण भाग हैं?
निको हसे

स्प्रिंग बूट के सापेक्ष इस उत्तर में एक विशेष बात ध्यान देने वाली है कि इससे मुझे पहले तो थोड़ा सिरदर्द हुआ। स्प्रिंगफ्रैमवर्क के एररकोनट्रॉलर इंटरफेस को लागू करना महत्वपूर्ण है। यदि आप ऐसा करने के बिना "/ त्रुटि" के लिए मैप किया गया एक नियंत्रक समापन बिंदु बनाते हैं, तो आपको यह बताने में त्रुटि होगी कि विधि पहले से मैप की गई है।
mmaynar1

8

निर्भरता को जोड़ने का प्रयास करें।

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2
हालांकि यह वास्तव में क्या करता है?
चुपके रब्बी

मैंने इस निर्भरता को जोड़ा, और यह काम किया। @StealthRabbi की तरह ... मैं भी सोच रहा हूँ कि वास्तव में क्या करता है।
ट्विंधम

@StealthRabbi यह थाइमेलफ नामक एक टेम्प्लेटिंग ढांचे के लिए एक निर्भरता जोड़ता है, जो कि JSP का एक वैकल्पिक और पसंदीदा तरीका है। यह उत्तर वास्तविक उत्तर नहीं है, निर्भरता के आसपास फेंकने से किसी को भी मदद नहीं मिलती है जो वास्तव में मूल मुद्दे में रुचि रखते हैं
क्रिश्चियन

5

मैंने इस निर्भरता को जोड़ा और इसने मेरी समस्या को हल किया।

<dependency>
    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

यहां मेरा सिद्धांत है: यदि हम "@ कंट्रोलर" का उपयोग कर रहे हैं, तो किसी भी तरह वसंत को हमें एक निश्चित टेम्पलेट इंजन की आवश्यकता होगी। और इस मामले में, Thymeleaf। इसलिए, वसंत-बूट-स्टार्टर-थाइमेल्फ की आवश्यकता है। अगर हम "@ रेस्ट्रॉन्ट्रोलर" का उपयोग कर रहे हैं, तो स्प्रिंग बूट को टेम्पलेट इंजन की आवश्यकता नहीं होगी। और इसलिए, यह थाइमेलफ के बिना काम करता है।
योसी प्रमाजया

4

मैं कुछ हफ्तों के लिए स्प्रिंग बूट एप्लिकेशन विकसित कर रहा हूं .. और मुझे नीचे की तरह ही त्रुटि मिल रही थी;

व्हिटेलबेल त्रुटि पृष्ठ इस एप्लिकेशन के पास / त्रुटि के लिए कोई स्पष्ट मानचित्रण नहीं है, इसलिए आप इसे एक गिरावट के रूप में देख रहे हैं। थु जन 18 14:12:11 एएसटी 2018 में एक अप्रत्याशित त्रुटि थी (प्रकार = नहीं मिला, स्थिति = 404)। कोई संदेश उपलब्ध नहीं है

जब मुझे यह त्रुटि मिलती है तो मुझे एहसास होता है कि मेरे नियंत्रक या बाकी नियंत्रक वर्ग को मेरी परियोजना में परिभाषित नहीं किया गया है। मेरा मतलब है कि हमारे सभी नियंत्रक पैकेज मुख्य वर्ग के साथ समान पैकेज नहीं हैं, जिसमें @SpringBootApplication एनोटेशन शामिल है। मेरा मतलब है कि आपको नियंत्रक पैकेज का नाम @ComponentScan एनोटेशन से अपने मुख्य वर्ग में जोड़ने की आवश्यकता है जो @ inpringBootApplication एनोटेशन है। यदि आप कोड लिखते हैं नीचे आपकी समस्या हल हो जाएगी ... सबसे महत्वपूर्ण बात यह है कि आपको अपने सभी नियंत्रक पैकेज को @ComponentScan एनोटेशन में जोड़ना होगा जैसे मैंने नीचे दिया है

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({ "com.controller.package1, com.controller.package2, com.controller.package3, com.controller.packageN", "controller", "service" } // If our Controller class or Service class is not in the same packages we have //to add packages's name like this...directory(package) with main class
public class MainApp {
    public static void main(String[] args) {
        SpringApplication.run(MainApp.class, args);
    }
}

मुझे उम्मीद है कि यह कोड किसी की मदद करने जा रहे हैं ...

यदि आपको इस त्रुटि को हल करने का कोई अन्य तरीका मिल गया है या आपके पास मेरे लिए कुछ सुझाव हैं, तो कृपया टिप्पणियों में लिखें ... धन्यवाद ...


4

मुख्य वर्ग में, कॉन्फ़िगरेशन "@SpringBootApplication" के बाद, "@ComponentScan" को बिना किसी तर्क के जोड़कर, मेरे लिए काम किया !!!

मुख्य वर्ग:

@SpringBootApplication
@ComponentScan
public class CommentStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(CommentStoreApplication.class, args);

    }
}

RestController कक्षा:

@RestController
public class CommentStoreApp {

    @RequestMapping("/") 
    public String hello() {
        return "Hello World!";
    }
}

पुनश्च: आवेदन शुरू करने से पहले mvan साफ और mvn स्थापित कमांड चलाने के लिए याद मत करो


4

पार्टी के लिए काफी देर हो चुकी है। वसंत आधिकारिक दस्तावेज के अनुसार "स्प्रिंग बूट एक श्वेतसूची त्रुटि पृष्ठ स्थापित करता है जिसे आप ब्राउज़र क्लाइंट में देखते हैं यदि आप सर्वर त्रुटि का सामना करते हैं।" https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page

  1. आप application.yml या application.properties फ़ाइल server.error.whitelabel.enabled=falseमें सेटिंग करके सुविधा को अक्षम कर सकते हैं ।

2. अनुशंसित तरीका अपना त्रुटि पृष्ठ सेट करता है ताकि अंतिम उपयोगकर्ता समझ सके। संसाधन / टेम्प्लेट फ़ोल्डर के अंतर्गत एक त्रुटि। Html फ़ाइल बनाते हैं और pom.xml फ़ाइल में निर्भरता जोड़ते हैं

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

स्प्रिंग स्वतः ही डिफ़ॉल्ट त्रुटि टेम्पलेट के रूप में error.html पेज को चुन लेगा। नोट: - निर्भरता जोड़ने के बाद मावेन प्रोजेक्ट को अपडेट करना न भूलें।


3

हो सकता है कि आपको त्रुटि मिल रही हो

"इस एप्लिकेशन के पास / त्रुटि के लिए कोई स्पष्ट मानचित्रण नहीं है, इसलिए आप इसे गिरावट के रूप में देख रहे हैं।"

ऐसा इसलिए है क्योंकि यह आपके नियंत्रक और सेवा वर्गों को स्कैन नहीं कर रहा है, जिसे आपको अपने मुख्य () वर्ग में इस तरह निर्दिष्ट करना है,

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
**@ComponentScan({"com.example.demo", "controller", "service"})**
public class SpringBootMvcExample1Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMvcExample1Application.class, args);
    }
}

नोट: यहां, मैंने विभिन्न वर्गों जैसे कि डेमो, नियंत्रक और सेवा को स्कैन करने के लिए निर्दिष्ट किया है, तभी यह ठीक से काम करेगा।


3

आपको संकुल व्यवस्थित करना होगा ताकि सार्वजनिक स्थैतिक मुख्य (या जहाँ आपने @SpringBootApplication लिखा हो) पैकेज, आपके सभी अन्य पैकेजों का जनक हो।


- com.mypackage + nameApplication.java - com.mypachage.model - com.mypachage.controller - com.mypachage.dao
sakgeek

3

डिफ़ॉल्ट रूप से स्प्रिंग बूट बीन परिभाषा के लिए वर्तमान पैकेज को स्कैन करेगा। इसलिए यदि आपका वर्तमान पैकेज जहां मुख्य वर्ग परिभाषित है और नियंत्रक पैकेज समान नहीं है या नियंत्रक पैकेज आपके मुख्य ऐप पैकेज का चाइल्ड पैकेज नहीं है तो यह नियंत्रक को स्कैन नहीं करेगा। इस समस्या को हल करने के लिए मुख्य पैकेज में सेम परिभाषा के लिए संकुल की सूची शामिल की जा सकती है

@SpringBootApplication(scanBasePackages = {"com.module.restapi1.controller"})

या पैकेज का एक पदानुक्रम बनाएं जहां बाल पैकेज मुख्य पैकेज से प्राप्त होता है

package com.module.restapi;
package com.module.restapi.controller

2

समस्या यह है कि आप लोकलहोस्ट के लिए नेविगेट कर रहे हैं: 8080 / लोकलहोस्ट के बजाय: 8080 / अपलोड करें जैसा कि गाइड में निर्धारित है। स्प्रिंग बूट में एक डिफ़ॉल्ट त्रुटि पृष्ठ का उपयोग किया जाता है जब आप सर्वर विशिष्ट विवरण (जिसे सुरक्षा जोखिम के रूप में देखा जा सकता है) को देने से बचने के लिए अपरिभाषित मार्ग पर जाते हैं।

आपके पास विकल्प या तो हैं: सही पृष्ठ पर जाएं, अपना लैंडिंग पृष्ठ जोड़ें, या सफेद त्रुटि पृष्ठ को ओवरराइड करें

इस विशेष स्थिति को सरल बनाने के लिए, मैंने गाइड को अपडेट किया ताकि यह / अपलोड के बजाय / का उपयोग करे।


2

मुझे पता है कि यह सवाल का जवाब नहीं है, लेकिन यह सवाल सबसे पहले Google पर दिखाई देता है :)

समस्या ("इस एप्लिकेशन के पास / त्रुटि के लिए कोई स्पष्ट मानचित्रण नहीं है") स्वैगर UI तक पहुंचने का प्रयास करते समय दिखाई देता है।

मेरे मामले में समस्याएं @RestController ("/ endpoint") के कारण थीं, जिसे स्वैगर द्वारा ठीक से नियंत्रित नहीं किया गया है।

तो, इसके परिणामस्वरूप त्रुटियां हुईं:

@RestController("/endpoint")
public class EndpointController {

और यह ठीक था

@RestController
@RequestMapping("/endpoint")
public class EndpointController {

2

यदि आप अपने नियंत्रक वर्ग आयात आयात के शीर्ष पर @RestController एनोटेशन भूल जाते हैं तो यह हो सकता है। org.springframework.web.bind.annotation.RestController;

और नीचे के रूप में एनोटेशन जोड़ें

नीचे सरल उदाहरण देखें

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;


@RestController
public class HelloController {
@RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

1

अपने नियंत्रक वर्ग में @Controller को @RestController बदलें और सब कुछ सुचारू रूप से चलना चाहिए।


1

मुझे भी वही त्रुटि मिली और नीचे की निर्भरता को मेरे pom.xml में जोड़कर त्रुटि को हल करने में सक्षम था।

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

कारण यह है कि हम JSP का उपयोग दृश्य के रूप में कर रहे हैं। स्प्रिंग बूट स्टार्टर वेब के लिए डिफ़ॉल्ट एम्बेडेड सर्वलेट कंटेनर टॉमकट है। JSP के लिए समर्थन को सक्षम करने के लिए, हमें tomcat-embed-jasper पर निर्भरता जोड़ने की आवश्यकता होगी।

मेरे मामले में मैं नियंत्रक से दृश्य के रूप में एक जेएसपी लौटा रहा था। आशा है कि यह उत्तर किसी ऐसे व्यक्ति की मदद करता है जो उसी मुद्दे से जूझ रहे हैं।


1

मैं एक ही समस्या का सामना कर रहा था, ग्रेडेल का उपयोग कर रहा था और यह निम्नलिखित निर्भरताओं को जोड़ने पर हल हो गया-

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
compile('org.apache.tomcat.embed:tomcat-embed-jasper')

इससे पहले मैं एक ही त्रुटि के कारण पिछले एक को याद कर रहा था।


मैं एक ही समस्या थी, और मैं pom.xml में टोमैट-एंबेड-जैस्पर प्लगइन गायब था। और jsp प्रतिपादन के लिए tomcat-embed-jasper महत्वपूर्ण है।
रिनिलनाथ

boraji.com/… , इससे यह पता चलता है कि टोमकैट -एंबेड-जैस्पर गायब था
rinilnath

1

मैं इस मुद्दे का सामना कर रहा था और फिर बाद में महसूस किया कि मैं वर्ग @Configurationमें एनोटेशन को याद कर रहा था MvcConfigजो मूल रूप से मैपिंग के लिए करता है ViewControllersऔर setViewNames

यहाँ फ़ाइल की सामग्री है:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
**@Configuration**
public class MvcConfig implements WebMvcConfigurer{
   public void addViewControllers(ViewControllerRegistry registry)
   {
      registry.addViewController("/").setViewName("login");
      registry.addViewController("/login").setViewName("login");
      registry.addViewController("/dashboard").setViewName("dashboard");
   }
}

उम्मीद है कि यह किसी की मदद करता है !!


यह मेरे लिए किया।
एंथनी ओकोथ

1

सुनिश्चित करें कि आपके पास निर्भरता की सूची में जैस्पर और जेस्टएल है:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

यहाँ एक कार्यशील स्टार्टर परियोजना है - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

लेखक: बीजू कुंजुमेन


1

मुझे इस तरह से उल्लेख करने और संकुल को संदर्भ देने की आवश्यकता है और इसने काम किया। आप @EnableAutoConfigurationइस एनोटेशन को बाहर कर सकते हैं, लेकिन मेरे लिए किसी भी डीबी से संबंधित अवसादों को बायपास करना आवश्यक है।

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@ComponentScan(basePackages = {"your package 1", "your package2"})

public class CommentStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(CommentStoreApplication.class, args);

    }
}


0

इस तरह की समस्या को हल करने के लिए मैंने केवल MVCConfig क्लास में anotation @Configuration का उल्लेख किया है ।

इस तरह :

package com.example;

/**
 * Created by sartika.s.hasibuan on 1/10/2017.
 */
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }

}

0

मेरे पास एक समान गलती थी, मैं स्प्रिंग बूट और वेग का उपयोग करता हूं, मेरा समाधान फ़ाइल एप्लिकेशन की जांच करना है। सामानों की जांच, स्प्रिंग ।velocity.toolbox-config-location पाया कि यह संपत्ति गलत है


0

मेरे मामले में, यह समस्या तब होती है जब इसे पहले मावेन के साथ चलाने के बाद इंटेलीजे के भीतर से स्प्रिंगएप्लिकेशंस को चलाया जाता है।

समस्या को हल करने के लिए, मैं पहले दौड़ता हूं mvn clean। तब मैं IntelliJ के भीतर से स्प्रिंगएप्लिकेशंस चलाता हूं।


0

अपने मुख्य को सुनिश्चित करें। कक्षा आपके नियंत्रकों के ऊपर होनी चाहिए। निम्नलिखित उदाहरण के मामले में:

मेन.क्लास युक्त:

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

EmployeeController। वर्ग युक्त:

@RestController
public class EmployeeController {
    @InitBinder
    public void setAllowedFields(WebDataBinder dataBinder) {
        dataBinder.setDisallowedFields("id");
    }

    @RequestMapping(value = "/employee/save", method = RequestMethod.GET)
    public String save(){
        Employee newEmp = new Employee();
        newEmp.setAge(25);
        newEmp.setFirstName("Pikachu");
        newEmp.setId(100);
        return "Name: " + newEmp.getFirstName() + ", Age: " + newEmp.getAge() + ", Id = " + newEmp.getId();
    }
}

यदि आपका मुख्य वर्ग रूट फ़ोल्डर में है, तो इस पथ की तरह: {प्रोजेक्टनेम} / src / main / java / main तो अपने मुख्य वर्ग के नीचे अपने नियंत्रकों को सुनिश्चित करें। उदाहरण के लिए {projectname} / src / main / java / main / नियंत्रकों


0

आपकी जावा फ़ाइल में (कहो: Viper.java) मुख्य वर्ग जोड़ रहा है: "@RestController" और @RequestMapping ("/")

@SpringBootApplication
@RestController
public class Viper {

  @RequestMapping("/")

   public String home(){
          return "This is what i was looking for";                      
     }

public static void main( String[] args){

   SpringApplication.run(Viper.class , args);
}

}

0

जांचें कि क्या आपने @RestController एनोटेशन के साथ कंट्रोलर क्लास को चिह्नित किया है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.