我試圖讓我的 OrderController 作業,但 MVC 似乎找不到它。有誰知道為什么會這樣?
初始化器類。getServletMapping 方法不斷通知我未注釋的方法覆寫用@NonNullApi 注釋的方法
package configs;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{Config.class};
}
@Override
protected String[] getServletMappings() {
return new String[] { "/api/*" };
}
}
配置類。
package configs;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import javax.sql.DataSource;
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"model"})
@PropertySource("classpath:/application.properties")
public class Config {
@Bean
public JdbcTemplate getTemplate(DataSource ds) {
return new JdbcTemplate(ds);
}
@Bean
public DataSource dataSource(Environment env) {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("org.hsqldb.jdbcDriver");
ds.setUrl(env.getProperty("hsql.url"));
var populator = new ResourceDatabasePopulator(
new ClassPathResource("schema.sql"),
new ClassPathResource("data.sql")
);
DatabasePopulatorUtils.execute(populator, ds);
return ds;
}
}
然后是控制器。
package controllers;
import model.Order;
import model.OrderDAO;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class OrderController {
private OrderDAO orderdao;
public OrderController(OrderDAO orderDAO) {
this.orderdao = orderDAO;
}
@PostMapping("orders")
@ResponseStatus(HttpStatus.CREATED)
public Order saveOrder(@RequestBody Order order) {
return orderdao.addOrder(order);
}
@GetMapping("orders/{id}")
public Order getOrderById(@PathVariable Long id) {
return orderdao.getOrderById(id);
}
@GetMapping("orders")
public List<Order> getOrders() {
return orderdao.getAllOrders();
}
@DeleteMapping("orders/{id}")
public void deleteOrderById(@PathVariable Long id) {
orderdao.deleteOrderById(id);
}
}
一切都很好,我找不到問題。
uj5u.com熱心網友回復:
由于OrderController在controllers包中,我忘記在configs componentScan引數中添加包了。
uj5u.com熱心網友回復:
您的控制器在 處注冊端點/orders/*,但在getServletMappings您指定/api/*. 您應該/api為控制器添加前綴,如下所示
@RestController
@RequestMapping("api")
public class OrderController {
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/345780.html
