Ứng dụng này không có ánh xạ rõ ràng cho / lỗi


108

Tôi đã sử dụng maven để thực hiện hướng dẫn https://spring.io/guides/gs/uploading-files/
Tất cả các mã tôi sử dụng đã được sao chép.

Ứng dụng có thể chạy, nhưng tôi gặp lỗi:

Trang lỗi nhãn trắng Ứng dụng này không có ánh xạ rõ ràng cho / lỗi, vì vậy bạn đang xem đây là dự phòng. Thứ Ba 30 tháng 6 17:24:02 CST 2015 Đã xảy ra lỗi không mong muốn (type = Not Found, status = 404). Không có tin nhắn

Làm thế nào tôi có thể sửa chữa nó?


đã thêm nhận xét của bạn vào bài đăng - bạn có thể tự chỉnh sửa nó. Đó là tốt hơn so với bình luận bài của riêng bạn
Alexander

Câu trả lời:


137

Đảm bảo rằng lớp chính của bạn nằm trong gói gốc bên trên các lớp khác.

Khi bạn chạy ứng dụng Spring Boot, (tức là một lớp được chú thích bằng @SpringBootApplication), Spring sẽ chỉ quét các lớp bên dưới gói lớp chính của bạn.

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

4
Trên hay ngang hàng?
Martin Erlic

21
Tôi đã dành gần 2 giờ của cuộc đời mình để tìm ra điều này!
Rakesh

7
Đã thử điều đó quá. Vẫn lỗi. Ít nhất thì trang chính, tức là localhost: 8080 phải hiển thị cho tôi trang chủ Tomcat, phải không? Nhưng điều đó quá không hiển thị
shah zulkarnain

Cảm ơn cho gợi ý. Tôi đã từng là người dùng Eclipse và ở đó cấu hình này không cần thiết, nhưng bây giờ tôi đang sử dụng IntelliJ và rất hy vọng.
Armer B.

@zulkarnainshah Trang chủ tomcat thông thường được tạo bởi một WAR không có ở đây.
Thorbjørn Ravn Andersen

61

Khi chúng tôi tạo một ứng dụng khởi động Spring, chúng tôi chú thích nó bằng @SpringBootApplicationchú thích. Chú thích này 'gói gọn' nhiều chú thích cần thiết khác để ứng dụng hoạt động. Một trong những chú thích như vậy là @ComponentScanchú thích. Chú thích này yêu cầu Spring tìm kiếm các thành phần Spring và cấu hình ứng dụng để chạy.

Lớp ứng dụng của bạn cần phải đứng đầu hệ thống phân cấp gói để Spring có thể quét các gói con và tìm ra các thành phần cần thiết khác.

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);
    }
}

Đoạn mã bên dưới hoạt động như gói bộ điều khiển nằm trong com.test.spring.bootgói

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!";
    }
}

Đoạn mã dưới đây KHÔNG hoạt động vì gói bộ điều khiển KHÔNG nằm trong com.test.spring.bootgói

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!";
     }
 }

Từ tài liệu Spring Boot:

Nhiều nhà phát triển Xuân Boot luôn có lớp học chính của họ chú thích với @Configuration, @EnableAutoConfiguration@ComponentScan. Vì các chú thích này thường xuyên được sử dụng cùng nhau (đặc biệt nếu bạn làm theo các phương pháp hay nhất ở trên), Spring Boot cung cấp một giải @SpringBootApplicationpháp thay thế thuận tiện .

Các @SpringBootApplicationchú thích là tương đương với việc sử dụng @Configuration, @EnableAutoConfiguration@ComponentScanvới các thuộc tính mặc định của họ


3
Giải thích rất hay. Cảm ơn bạn
Lova Chittumuri

39

Bạn có thể giải quyết vấn đề này bằng cách thêm ErrorControllervào ứng dụng của mình. Bạn có thể yêu cầu bộ điều khiển lỗi trả về dạng xem mà bạn cần.

Bộ điều khiển lỗi trong ứng dụng của tôi trông giống như dưới đây:

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;
    }
}

Lớp trên dựa trên lớp Springs BasicErrorController .

Bạn có thể khởi tạo ở trên ErrorControllernhư thế này trong một @Configurationtệp:

 @Autowired
 private ErrorAttributes errorAttributes;

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

Bạn có thể chọn ghi đè mặc định ErrorAttributesbằng cách triển khai ErrorAttributes . Nhưng trong hầu hết các trường hợp, DefaultErrorAttributes là đủ.


1
Liên kết của bạn với BasicErrorControllerlớp 404.
Stephane

@owaism: Liên kết cho BasicErrorControllerkhông còn tốt nữa, bạn có thể cập nhật được không?
HDJEMAI

1
Liên kết đến đã BasicErrorControllerđược sửa.
axiopisty

15

Trong trường hợp của tôi, lớp bộ điều khiển được chú thích bằng @Controller. Thay đổi điều đó để @RestControllergiải quyết vấn đề. Về cơ bản @RestController@Controller + @ResponseBody Vì vậy hoặc sử dụng @RestControllerhoặc @Controllervới @ResponseBodychú thích với mỗi phương pháp.

Một số lưu ý hữu ích tại đây: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/


Nó hoạt động, nhưng theo ví dụ, tất cả cấu hình cơ bản trên internet sẽ hoạt động với @Controller. Bất kỳ cơ thể nào biết lý do này tại sao chỉ RestController hoạt động?
siêu tân tinh

Khi chú thích lớp của bạn với @RestControllernó sẽ thêm @ResponseBodychú thích một cách ngầm định , nhưng nếu bạn đang sử dụng @Controllerchú thích, bạn phải tự thêm chú thích này một cách rõ ràng.
Robin Keskisarkka

10

trong trường hợp của tôi, vì vị trí gói, nghĩa là gói bộ điều khiển phải nằm trên gói lớp chính

nếu gói lớp chính của tôi là package co.companyname.spring.tutorial;bất kỳ gói bộ điều khiển nàopackage 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"; 
 }}

sau khi mã hóa xong nhấn bảng điều khiển khởi động

nhập mô tả hình ảnh ở đây

một điều cuối cùng để đảm bảo rằng bộ điều khiển của bạn đang lập bản đồ hay không chỉ là bảng điều khiển, bạn sẽ thấy một số

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

mã hóa hạnh phúc


9

Điều này xảy ra khi một trang lỗi rõ ràng không được xác định. Để xác định một trang lỗi, hãy tạo một ánh xạ / lỗi với một dạng xem. ví dụ: đoạn mã dưới đây ánh xạ tới một giá trị chuỗi được trả về trong trường hợp có lỗi.

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";
    }

}

Bạn có thể thêm một số giải thích cho mã của bạn? Tại sao nó giải quyết được câu hỏi, đó là những phần quan trọng nào?
Nico Haase,

Có một điều cụ thể cần lưu ý trong câu trả lời này liên quan đến Spring Boot khiến tôi hơi đau đầu lúc đầu. Điều quan trọng là phải triển khai giao diện ErrorController của springframework. Nếu bạn tạo một điểm cuối của bộ điều khiển được ánh xạ tới "/ error" mà không thực hiện việc này, bạn sẽ gặp lỗi cho bạn biết rằng phương thức đã được ánh xạ.
mmaynar1

8

Hãy thử thêm phần phụ thuộc.

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

2
điều này thực sự làm gì?
Stealth Rabbi

Tôi đã thêm phụ thuộc này, và nó đã hoạt động. Cũng giống như @StealthRabbi ... Tôi cũng tự hỏi điều đó thực sự có tác dụng gì.
twindham

@StealthRabbi Điều này bổ sung sự phụ thuộc vào khuôn khổ tạo khuôn mẫu được gọi là Thymeleaf, là một giải pháp thay thế và là cách tiếp cận ưa thích đối với JSP. Câu trả lời này không phải là câu trả lời thực sự imo, việc ném xung quanh sự phụ thuộc không giúp ích cho bất kỳ ai thực sự quan tâm đến vấn đề cốt lõi
Christian

5

Tôi đã thêm sự phụ thuộc này và nó đã giải quyết được vấn đề của tôi.

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

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

Đây là lý thuyết của tôi: Nếu chúng ta đang sử dụng "@Controller", bằng cách nào đó Spring sẽ yêu cầu chúng ta có một công cụ mẫu nhất định. Và trong trường hợp này, Thymeleaf. Do đó, cần phải có spring-boot-starter-thymeleaf. Trong khi nếu chúng ta đang sử dụng "@RestController", Spring Boot sẽ không yêu cầu công cụ mẫu. Và do đó, nó hoạt động mà không cần Thymeleaf.
Yosi Pramajaya

4

Tôi đang phát triển ứng dụng Spring Boot trong một vài tuần .. Và tôi đã gặp lỗi tương tự như bên dưới;

Trang lỗi nhãn trắng Ứng dụng này không có ánh xạ rõ ràng cho / lỗi, vì vậy bạn đang xem đây là dự phòng. Thu Jan 18 14:12:11 AST 2018 Đã xảy ra lỗi không mong muốn (type = Not Found, status = 404). Không có tin nhắn

Khi tôi gặp lỗi massage này, tôi nhận ra rằng bộ điều khiển hoặc lớp bộ điều khiển phần còn lại của tôi là ghi chú được xác định trong dự án của tôi. Ý tôi là tất cả các gói bộ điều khiển của chúng tôi không giống một gói với lớp chính bao gồm chú thích @SpringBootApplication .. Ý tôi là bạn cần thêm tên của gói bộ điều khiển vào chú thích @ComponentScan vào lớp chính của bạn , bao gồm chú thích @SpringBootApplication. Nếu bạn viết mã dưới đây vấn đề của bạn sẽ được giải quyết ... Điều quan trọng nhất là bạn phải thêm gói tất cả bộ điều khiển của mình vào chú thích @ComponentScan như tôi đã làm trong phần bên dưới

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);
    }
}

Tôi hy vọng mã này sẽ giúp ai đó ...

Nếu bạn tìm thấy một cách khác để giải quyết lỗi này hoặc bạn có một số đề xuất cho tôi, vui lòng viết vào ý kiến ​​... cảm ơn ...


4

Trong lớp chính, sau khi cấu hình "@SpringBootApplication", thêm "@ComponentScan" mà không có bất kỳ đối số nào, đã hiệu quả với tôi !!!

Lớp chính :

@SpringBootApplication
@ComponentScan
public class CommentStoreApplication {

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

    }
}

Lớp RestController:

@RestController
public class CommentStoreApp {

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

PS: Đừng bỏ lỡ chạy lệnh mvn clean và mvn install trước khi khởi chạy ứng dụng


4

Đến bữa tiệc khá muộn. Theo tài liệu chính thức của mùa xuân "Spring Boot cài đặt trang lỗi nhãn trắng mà bạn thấy trong ứng dụng trình duyệt nếu bạn gặp lỗi máy chủ." https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page

  1. Bạn có thể tắt tính năng này bằng cách thiết lập server.error.whitelabel.enabled=falsetrong application.yml hoặc application.properties tập tin.

2. Cách đề xuất là đặt trang lỗi của bạn để người dùng cuối có thể hiểu được. Trong thư mục tài nguyên / mẫu, tạo tệp error.html và thêm phần phụ thuộc vào tệp pom.xml

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

Spring sẽ tự động chọn trang error.html làm mẫu lỗi mặc định. Lưu ý: - Đừng quên cập nhật dự án maven sau khi thêm phụ thuộc.


3

Bạn có thể gặp lỗi tức là

"Ứng dụng này không có ánh xạ rõ ràng cho / lỗi, vì vậy bạn đang coi đây là một dự phòng."

Điều này là do nó không quét các lớp Bộ điều khiển & Dịch vụ của bạn mà bạn phải chỉ định trong lớp chính () của mình như thế này,

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);
    }
}

Lưu ý: Ở đây, tôi đã chỉ định các lớp khác nhau như bản demo, bộ điều khiển và dịch vụ để được quét thì chỉ nó mới hoạt động bình thường.


3

Bạn phải tổ chức các gói sao cho gói chứa public static main (hoặc nơi bạn đã viết @SpringBootApplication), cha đẻ của tất cả các gói khác của bạn.


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

3

Theo mặc định, khởi động mùa xuân sẽ quét gói hiện tại để xác định bean. Vì vậy, nếu gói hiện tại của bạn trong đó lớp chính được xác định và gói bộ điều khiển không giống nhau hoặc gói bộ điều khiển không phải là gói con của gói ứng dụng chính của bạn, nó sẽ không quét bộ điều khiển. Để giải quyết vấn đề này, người ta có thể đưa vào danh sách các gói định nghĩa bean trong gói chính

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

hoặc tạo một hệ thống phân cấp của gói trong đó gói con có nguồn gốc từ gói chính

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

2

Vấn đề là bạn đang điều hướng đến localhost: 8080 / thay vì localhost: 8080 / upload như quy định trong hướng dẫn. Spring Boot có một trang lỗi mặc định được sử dụng khi bạn điều hướng đến một tuyến đường không xác định để tránh cung cấp thông tin chi tiết cụ thể cho máy chủ (có thể được xem như một rủi ro bảo mật).

Các tùy chọn của bạn là: truy cập đúng trang, thêm trang đích của riêng bạn hoặc ghi đè trang lỗi trắng .

Để đơn giản hóa tình huống cụ thể này, tôi đã cập nhật hướng dẫn để nó sử dụng / thay vì / tải lên.


2

Tôi biết nó không phải là câu trả lời chính xác cho câu hỏi, nhưng câu hỏi này lần đầu tiên xuất hiện trên Google :)

Sự cố ("Ứng dụng này không có ánh xạ rõ ràng cho / lỗi") xuất hiện khi cố gắng truy cập giao diện người dùng Swagger.

Trong trường hợp của tôi, sự cố do @RestController ("/ endpoint") gây ra, không được xử lý đúng cách bằng swagger.

Vì vậy, điều này dẫn đến lỗi:

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

Và điều này đã ổn

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

2

điều này có thể xảy ra nếu bạn quên chú thích @RestController ở đầu lớp bộ điều khiển import org.springframework.web.bind.annotation.RestController;

và thêm chú thích như bên dưới

tham khảo ví dụ đơn giản dưới đây

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

Thay đổi @Controller thành @RestController trong lớp bộ điều khiển của bạn và mọi thứ sẽ diễn ra suôn sẻ.


1

Tôi cũng gặp lỗi tương tự và có thể giải quyết lỗi bằng cách thêm phần phụ thuộc bên dưới vào pom.xml của mình.

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

Lý do là chúng tôi đang sử dụng JSP làm chế độ xem. Vùng chứa servlet được nhúng mặc định cho Spring Boot Starter Web là tomcat. Để kích hoạt hỗ trợ cho JSP, chúng tôi sẽ cần thêm một phụ thuộc vào tomcat-nhúng-jasper.

Trong trường hợp của tôi, tôi đã trả lại một JSP dưới dạng xem từ bộ điều khiển. Hy vọng câu trả lời này sẽ giúp những người đang đấu tranh với vấn đề tương tự.


1

Tôi đang gặp phải vấn đề tương tự, sử dụng gradle và nó đã được giải quyết bằng cách thêm các phụ thuộc sau-

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')

trước đó tôi đã thiếu cái cuối cùng gây ra lỗi tương tự.


Tôi đã gặp vấn đề tương tự và tôi thiếu plugin tomcat-nhúng-jasper trong pom.xml. Và tomcat-nhúng-jasper rất quan trọng để kết xuất jsp.
rinilnath

boraji.com/… , khách hàng tiềm năng này để tìm thấy tomcat-nhúng-jasper bị mất tích
rinilnath

1

Tôi đã phải đối mặt với vấn đề này và sau đó nhận ra rằng tôi đã thiếu @Configurationchú thích trong MvcConfiglớp về cơ bản thực hiện ánh xạ cho ViewControllerssetViewNames.

Đây là nội dung của tập tin:

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");
   }
}

Hy vọng điều này sẽ giúp ai đó !!


Điều này đã làm điều đó cho tôi.
Anthony Okoth

1

Đảm bảo rằng bạn có jasper và jstl trong danh sách các phần phụ thuộc:

<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>

Đây là một dự án khởi đầu đang hoạt động - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

Tác giả: Biju Kunjummen


1

Tôi cần phải đề cập đến cách này và cung cấp tham chiếu đến các gói và nó đã hoạt động. Bạn có thể loại trừ @EnableAutoConfigurationchú thích này nhưng tôi bắt buộc phải bỏ qua mọi phụ thuộc liên quan đến DB.

@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);

    }
}

1

Lớp chính cần nằm ngoài cấu trúc cây gói ứng dụng của bạn. Ví dụ: thí dụ


0

Tất cả những gì tôi đã làm để giải quyết loại vấn đề này là đề cập đến chú thích @Configuration trong MVCConfig Class.

Giống như cái này :

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

Tôi đã gặp phải một lỗi tương tự, tôi sử dụng khởi động mùa xuân và vận tốc, giải pháp của tôi là kiểm tra tệp application.properties, spring.velocity.toolbox-config-location thấy rằng thuộc tính này sai


0

Trong trường hợp của tôi, sự cố này xảy ra khi chạy SpringApplication từ bên trong IntelliJ sau khi chạy nó trước với maven.

Để giải quyết vấn đề, tôi chạy trước mvn clean. Sau đó, tôi chạy SpringApplication từ bên trong IntelliJ.


0

Đảm bảo chính của bạn. lớp phải nằm trên bộ điều khiển của bạn. Trong trường hợp của ví dụ sau:

Main.class chứa:

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

EmployeeController. lớp chứa:

@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();
    }
}

Nếu lớp chính của bạn nằm trong thư mục gốc, giống như đường dẫn sau: {projectname} / src / main / java / main thì hãy đảm bảo bộ điều khiển của bạn bên dưới lớp Chính của bạn. Ví dụ: {projectname} / src / main / java / main / controller .


0

Trong tệp java của bạn (giả sử: Viper.java) có thêm lớp chính: "@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

Kiểm tra xem bạn đã đánh dấu lớp bộ điều khiển bằng chú thích @RestController chưa .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.