Aplikasi ini tidak memiliki pemetaan eksplisit untuk / error

108

Saya menggunakan maven untuk melakukan tutorial https://spring.io/guides/gs/uploading-files/
Semua kode yang saya gunakan telah disalin.

Aplikasi dapat berjalan, tetapi saya mendapatkan error:

Halaman Kesalahan Label Putih Aplikasi ini tidak memiliki pemetaan eksplisit untuk / error, jadi Anda melihatnya sebagai fallback. Sel 30 Jun 17:24:02 CST 2015 Terjadi error yang tidak terduga (type = Not Found, status = 404). Tidak ada pesan yang tersedia

Bagaimana cara memperbaikinya?

Deng Steve
sumber
menambahkan komentar Anda ke postingan - Anda dapat mengeditnya sendiri. Itu lebih baik daripada mengomentari kiriman Anda sendiri
Alexander

Jawaban:

137

Pastikan kelas utama Anda berada dalam paket root di atas kelas lain.

Saat Anda menjalankan Aplikasi Spring Boot, (yaitu kelas yang dianotasi dengan @SpringBootApplication), Spring hanya akan memindai kelas di bawah paket kelas utama Anda.

com
   +- APP
         +- Application.java  <--- your main class should be here, above your controller classes
         |
         +- model
         |   +- user.java
         +- controller
             +- UserController.java
vignesh Subash
sumber
4
Di atas atau di level yang sama?
Martin Erlic
21
Saya menghabiskan hampir 2 jam dalam hidup saya untuk memikirkan hal ini!
Rakesh
7
Mencoba itu juga. Masih error. Setidaknya halaman utama yaitu localhost: 8080 harus menunjukkan homepage Tomcat, bukan? Tapi itu juga tidak muncul
zulkarnain shah
Terima kasih atas petunjuknya. Saya dulu adalah pengguna Eclipse dan di sana konfigurasi ini tidak diperlukan, tetapi sekarang saya menggunakan IntelliJ dan itu sangat penuh harapan.
Armer B.
@zulkarnainshah Homepage tomcat biasa dihasilkan oleh WAR yang tidak disertakan di sini.
Thorbjørn Ravn Andersen
61

Saat kami membuat aplikasi boot Musim Semi, kami menganotasinya dengan @SpringBootApplicationanotasi. Anotasi ini 'merangkum' banyak anotasi lain yang diperlukan agar aplikasi dapat bekerja. Salah satu anotasi tersebut adalah @ComponentScananotasi. Anotasi ini memberi tahu Spring untuk mencari komponen Spring dan mengonfigurasi aplikasi untuk dijalankan.

Kelas aplikasi Anda harus berada di puncak hierarki paket Anda, sehingga Spring dapat memindai sub-paket dan mengetahui komponen lain yang diperlukan.

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

Potongan kode di bawah ini berfungsi sebagai paket pengontrol di bawah com.test.spring.bootpaket

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

Potongan kode di bawah ini TIDAK Berfungsi karena paket pengontrol TIDAK di bawah com.test.spring.bootpaket

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

Dari dokumentasi Spring Boot:

Banyak pengembang Spring Boot selalu memiliki kelas utamanya yang dianotasi @Configuration, @EnableAutoConfigurationdan @ComponentScan. Karena anotasi ini sangat sering digunakan bersama (terutama jika Anda mengikuti praktik terbaik di atas), Spring Boot memberikan @SpringBootApplicationalternatif yang nyaman .

The @SpringBootApplicationpenjelasan setara dengan menggunakan @Configuration, @EnableAutoConfigurationdan @ComponentScandengan atribut default

musibs
sumber
3
Penjelasan yang sangat bagus. Terima kasih
Lova Chittumuri
39

Anda dapat mengatasi ini dengan menambahkan ErrorControllerdi aplikasi Anda. Anda dapat meminta pengontrol kesalahan mengembalikan tampilan yang Anda perlukan.

Error Controller di aplikasi saya terlihat seperti di bawah ini:

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

Kelas di atas didasarkan pada kelas Springs BasicErrorController .

Anda dapat membuat contoh di atas ErrorControllerseperti ini dalam sebuah @Configurationfile:

 @Autowired
 private ErrorAttributes errorAttributes;

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

Anda dapat memilih menimpa default ErrorAttributesdengan menerapkan ErrorAttributes . Namun dalam kebanyakan kasus, DefaultErrorAttributes sudah cukup.

owaisme
sumber
1
Tautan Anda ke BasicErrorControllerkelas 404.
Stephane
@owaism: Link untuk BasicErrorControllertidak bagus lagi, bisakah anda update?
HDJEMAI
1
Tautan ke BasicErrorControllertelah diperbaiki sekarang.
aksiopisti
15

Dalam kasus saya, kelas pengontrol telah diberi anotasi @Controller. Mengubahnya untuk @RestControllermenyelesaikan masalah. Pada dasarnya @RestControlleradalah @Controller + @ResponseBody Jadi baik digunakan @RestController, atau @Controllerdengan @ResponseBodypenjelasan dengan masing-masing metode.

Beberapa catatan berguna di sini: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

kunci saya
sumber
Ini berfungsi, tetapi seperti contoh di seluruh konfigurasi dasar internet harus bekerja dengan @Controller. Adakah tubuh yang menyadari alasan ini mengapa hanya RestController yang berfungsi?
supernova
Saat membuat anotasi kelas Anda dengan @RestControlleritu secara implisit menambahkan @ResponseBodyanotasi, tetapi jika Anda menggunakan @Controlleranotasi, Anda harus secara eksplisit menambahkan anotasi ini sendiri.
Robin Keskisarkka
10

dalam kasus saya karena posisi paket, artinya paket pengontrol harus berada di atas paket kelas utama

jika paket kelas utama saya adalah package co.companyname.spring.tutorial;paket pengontrol apa punpackage 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"; 
 }}

setelah selesai coding dashboard boot tekan

masukkan deskripsi gambar di sini

satu hal terakhir untuk memastikan pengontrol Anda memetakan atau bukan hanya konsol, Anda akan melihat sesuatu yang tersenyum

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

selamat coding

Mina Fawzy
sumber
9

Coba tambahkan ketergantungan.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Sree
sumber
2
apa yang sebenarnya dilakukan ini?
Stealth Rabbi
Saya menambahkan ketergantungan ini, dan berhasil. Sama seperti @StealthRabbi ... Saya juga bertanya-tanya apa sebenarnya fungsinya.
twindham
@StealthRabbi Ini menambahkan dependensi ke kerangka kerja template yang disebut Thymeleaf, yang merupakan alternatif dan pendekatan yang disukai untuk JSP. Jawaban ini bukan jawaban nyata, membuang ketergantungan tidak membantu siapa pun yang benar-benar tertarik dengan masalah inti
Christian
9

Ini terjadi ketika halaman kesalahan eksplisit tidak ditentukan. Untuk menentukan halaman kesalahan, buat pemetaan / error dengan tampilan. misalnya kode di bawah ini memetakan ke nilai string yang dikembalikan jika terjadi kesalahan.

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

}
prabhat kumar
sumber
Bisakah Anda menambahkan penjelasan ke kode Anda? Mengapa itu menjawab pertanyaan, yang merupakan bagian penting?
Nico Haase
Ada satu hal khusus yang perlu diperhatikan dalam jawaban ini terkait dengan Spring Boot yang membuat saya sedikit pusing pada awalnya. Penting untuk mengimplementasikan antarmuka ErrorController springframework. Jika Anda membuat titik akhir pengontrol yang dipetakan ke "/ error" tanpa melakukan ini, Anda akan mendapatkan pesan error yang memberi tahu Anda bahwa metode tersebut sudah dipetakan.
mmaynar1
5

Saya menambahkan ketergantungan ini dan itu memecahkan masalah saya.

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

    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Ekene Oguikpu
sumber
Inilah teori saya: Jika kita menggunakan "@Controller", entah bagaimana Spring akan meminta kita untuk memiliki mesin template tertentu. Dan dalam hal ini, Timeleaf. Oleh karena itu, diperlukan pegas-boot-starter-timeleaf. Sedangkan jika kita menggunakan "@RestController", Spring Boot tidak memerlukan mesin template. Dan karena itu, ia bekerja tanpa Timeleaf.
Yosi Pramajaya
4

Saya mengembangkan aplikasi Spring Boot selama beberapa minggu .. Dan saya mendapatkan error yang sama seperti di bawah ini;

Halaman Kesalahan Label Putih Aplikasi ini tidak memiliki pemetaan eksplisit untuk / error, jadi Anda melihatnya sebagai fallback. Kam 18 Jan 14:12:11 AST 2018 Ada error yang tidak terduga (type = Not Found, status = 404). Tidak ada pesan yang tersedia

Ketika saya mendapatkan pijatan kesalahan ini, saya menyadari kelas pengontrol atau pengontrol istirahat saya ditentukan dalam proyek saya. Maksud saya semua paket pengontrol kami tidak paket yang sama dengan kelas utama yang menyertakan anotasi @SpringBootApplication .. Maksud saya, Anda perlu menambahkan nama paket pengontrol Anda ke anotasi @ComponentScan ke kelas utama Anda yang termasuk anotasi @SpringBootApplication. Jika Anda menulis kode di bawah ini masalah Anda akan terpecahkan ... Yang paling penting adalah Anda harus menambahkan paket semua pengontrol Anda ke anotasi @ComponentScan seperti yang saya lakukan di bawah ini

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

Saya harap kode ini akan membantu seseorang ...

Jika Anda menemukan cara lain untuk mengatasi kesalahan ini atau Anda memiliki beberapa saran untuk saya, silakan tulis komentar ... terima kasih ...

Semih Erkaraca
sumber
4

Di kelas utama, setelah konfigurasi "@SpringBootApplication", menambahkan "@ComponentScan" tanpa argumen, berhasil untuk saya !!!

Kelas Utama:

@SpringBootApplication
@ComponentScan
public class CommentStoreApplication {

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

    }
}

Kelas RestController:

@RestController
public class CommentStoreApp {

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

PS: Jangan lewatkan untuk menjalankan perintah mvn clean dan mvn install, sebelum meluncurkan aplikasi

Harika
sumber
4

Cukup terlambat ke pesta. Sesuai dokumentasi resmi musim semi, "Spring Boot menginstal halaman kesalahan label putih yang Anda lihat di klien browser jika Anda mengalami kesalahan server." https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page

  1. Anda dapat menonaktifkan fitur tersebut dengan menetapkan server.error.whitelabel.enabled=falsedi application.yml atau application.properties berkas.

2. Cara yang disarankan adalah mengatur halaman kesalahan Anda sehingga pengguna akhir bisa mengerti. Di bawah folder resources / templates buat file error.html dan tambahkan dependensi di file pom.xml

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

Spring akan secara otomatis memilih halaman error.html sebagai template kesalahan default. Catatan: - Jangan lupa mengupdate project maven setelah menambahkan dependensi.

Joginder Malik
sumber
3

Anda mungkin mendapatkan kesalahan yaitu

"Aplikasi ini tidak memiliki pemetaan eksplisit untuk / error, jadi Anda melihatnya sebagai fallback."

Ini karena ini tidak memindai kelas Pengontrol & Layanan Anda yang harus Anda tentukan di kelas main () seperti ini,

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

Catatan: Di sini, saya telah menentukan berbagai kelas seperti demo, pengontrol, dan layanan untuk dipindai, hanya itu yang akan berfungsi dengan baik.

Rupesh Bharuka
sumber
3

Anda harus mengatur paket sehingga paket yang berisi public static main (atau di mana Anda menulis @SpringBootApplication), ayah dari semua paket Anda yang lain.

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

Secara default, boot musim semi akan memindai paket saat ini untuk definisi kacang. Jadi, jika paket Anda saat ini di mana kelas utama ditentukan dan paket pengontrol tidak sama atau paket pengontrol bukan paket turunan dari paket aplikasi utama Anda, pengontrol tidak akan memindai. Untuk mengatasi masalah ini, seseorang dapat memasukkan daftar paket untuk definisi kacang dalam paket utama

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

atau buat hierarki paket di mana paket turunan berasal dari paket utama

package com.module.restapi;
package com.module.restapi.controller
anand shukla
sumber
2

Masalahnya adalah Anda menavigasi ke localhost: 8080 / bukannya localhost: 8080 / upload seperti yang ditentukan dalam panduan. Spring Boot memiliki halaman kesalahan default yang digunakan saat Anda menavigasi ke rute yang tidak ditentukan untuk menghindari memberikan detail spesifik server (yang dapat dilihat sebagai risiko keamanan).

Pilihan Anda adalah: mengunjungi halaman yang benar, menambahkan halaman arahan Anda sendiri, atau mengganti halaman kesalahan putih .

Untuk menyederhanakan situasi khusus ini, saya memperbarui panduan sehingga menggunakan / bukannya / upload.

gregturn
sumber
2

Saya tahu ini bukan jawaban atas pertanyaan, tapi pertanyaan ini pertama kali muncul di Google :)

Masalah ("Aplikasi ini tidak memiliki pemetaan eksplisit untuk / kesalahan") muncul saat mencoba mengakses UI Swagger.

Dalam kasus saya, masalah disebabkan oleh @RestController ("/ endpoint"), yang tidak ditangani dengan baik oleh kesombongan.

Jadi, ini menghasilkan kesalahan:

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

Dan ini baik-baik saja

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

ini bisa terjadi jika Anda lupa anotasi @RestController di atas kelas kontroler import import org.springframework.web.bind.annotation.RestController;

dan tambahkan anotasi seperti di bawah ini

lihat contoh sederhana di bawah ini

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

}
Sithija Piyuman Thewa Hettige
sumber
1

Ubah @Controller ke @RestController di kelas pengontrol Anda dan semuanya akan berjalan lancar.

supernova
sumber
1

Saya juga mendapatkan kesalahan yang sama dan dapat mengatasi kesalahan tersebut dengan menambahkan ketergantungan di bawah ini ke pom.xml saya.

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

Alasannya adalah kami menggunakan JSP sebagai tampilan. Wadah servlet tertanam default untuk Spring Boot Starter Web adalah tomcat. Untuk mengaktifkan dukungan untuk JSP, kita perlu menambahkan ketergantungan pada tomcat-embed-jasper.

Dalam kasus saya, saya mengembalikan JSP sebagai tampilan dari pengontrol. Semoga jawaban ini membantu seseorang yang berjuang dengan masalah yang sama.

Sujana
sumber
1

Saya menghadapi masalah yang sama, menggunakan gradle dan itu diselesaikan dengan menambahkan dependensi berikut-

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

sebelumnya saya melewatkan yang terakhir menyebabkan kesalahan yang sama.

siddhartha attri
sumber
Saya memiliki masalah yang sama, dan saya kehilangan plugin tomcat-embed-jasper di pom.xml. Dan tomcat-embed-jasper penting untuk rendering jsp.
rinilnath
boraji.com/… , petunjuk ini untuk menemukan bahwa tomcat-embed-jasper hilang
rinilnath
1

Saya menghadapi masalah ini dan kemudian menyadari bahwa saya kehilangan @Configurationanotasi di MvcConfigkelas yang pada dasarnya melakukan pemetaan untuk ViewControllersdan setViewNames.

Berikut isi file tersebut:

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

Semoga ini bisa membantu seseorang !!

Arupesh RoyChowdhury
sumber
Ini berhasil untuk saya.
Anthony Okoth
1

Pastikan Anda memiliki jasper dan jstl dalam daftar dependensi:

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

Ini adalah proyek permulaan yang berfungsi - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

Penulis: Biju Kunjummen

Yersin
sumber
1

Saya perlu menyebutkan cara ini dan memberikan referensi ke paket dan berhasil. Anda dapat mengecualikan @EnableAutoConfigurationanotasi ini tetapi saya diminta untuk melewati ketergantungan terkait 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);

    }
}
mannedear
sumber
1

Kelas utama harus berada di luar struktur pohon paket aplikasi Anda. Sebagai contoh: contoh

Paulo Berezini
sumber
0

Semua yang telah saya lakukan untuk memecahkan masalah semacam ini adalah menyebutkan anotasi @Configuration di Kelas MVCConfig.

Seperti yang ini :

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

}
Sartika Hasibuan
sumber
0

Saya memiliki kesalahan serupa, saya menggunakan boot musim semi dan kecepatan, solusi saya adalah memeriksa file application.properties, spring.velocity.toolbox-config-location menemukan bahwa properti ini salah

叶 为 正
sumber
0

Dalam kasus saya, masalah ini terjadi saat menjalankan SpringApplication dari dalam IntelliJ setelah menjalankannya terlebih dahulu dengan maven.

Untuk mengatasi masalah tersebut, saya lari dulu mvn clean. Lalu saya menjalankan SpringApplication dari dalam IntelliJ.

Mert Nuhoglu
sumber
0

Pastikan Utama Anda. kelas harus di atas pengontrol Anda. Dalam kasus contoh berikut:

Main.class yang berisi:

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

EmployeeController. kelas yang berisi:

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

Jika kelas utama Anda ada di folder root, seperti jalur ini: {projectname} / src / main / java / main, pastikan pengontrol Anda berada di bawah kelas Utama Anda. Misalnya {projectname} / src / main / java / main / controllers .

Abed G.
sumber
0

Di file java Anda (katakan: Viper.java) yang memiliki kelas utama tambahkan: "@RestController" dan @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);
}

}
Mayur Chavan
sumber
0

Periksa apakah Anda telah menandai kelas pengontrol dengan anotasi @RestController .

Karthik Kamath
sumber