java - Spring MVC 后端返回 404 (Rest)

标签 java spring spring-mvc tomcat http-status-code-404

我希望有人能帮助我解决我的问题。我现在写了一个 Spring MVC 服务器和一个客户端。不幸的是,我的 Rest Controller 只返回 404。我使用的是 Tomcat 8。我所知道的是 Spring 应用程序已正确部署,因为我可以访问我的 index.jsp 页面。部署它的上下文是/backend。所以我的基本 url 是 localhost:8080/backend。现在我有一个看起来像这样的 restcontroller。

@Controller
@RequestMapping("/api/developer")
public class DeveloperController {

@Autowired
private DeveloperOutboundDipatcher service;

@RequestMapping(method = RequestMethod.GET, value = "/getAll")
public List<DeveloperDTO> findAll() {
    return service.findAllDeveloper();
}

@RequestMapping(method = RequestMethod.GET, value = "/get/{name}")
public DeveloperDTO findByName(@PathVariable String name) {
    return service.findOneByName(name);
}

@RequestMapping(method = RequestMethod.DELETE, value = "/delete/{name}")
public void deleteDeveloper(@PathVariable String name) {
    service.deleteDeveloper(name);
}

@RequestMapping(method = RequestMethod.POST, value = "/save/")
public void saveDeveloper(@RequestBody DeveloperDTO developer) {
    service.save(developer);
}

@RequestMapping(method = RequestMethod.PUT, value = "/edit/")
public void editDeveloper(@RequestBody DeveloperDTO developer) {
    service.edit(developer);
}
}

我的配置类如下所示:

package gamescreation;
@Configuration
@ComponentScan(basePackages= "gamescreation")
@EnableJpaRepositories("gamescreation")
@EnableTransactionManagement
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
private final String PROPERTY_DRIVER = "driver";
private final String PROPERTY_URL = "url";
private final String PROPERTY_USERNAME = "user";
private final String PROPERTY_PASSWORD = "password";
private final String PROPERTY_SHOW_SQL = "hibernate.show_sql";
private final String PROPERTY_DIALECT = "hibernate.dialect";

@Autowired
Environment environment;

@Bean
public ViewResolver getViewResolver(){
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}

@Bean
public ModelMapper modelMapper() {
    return new ModelMapper();
}



@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em
            = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan("gamescreation.entity" );

    JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    em.setJpaProperties(hibernateProperties());

    return em;
}

@Bean
public DataSource dataSource() {
    BasicDataSource dataSource = new BasicDataSource ();
    dataSource.setDriverClassName("org.postgresql.Driver");
    return dataSource;
}

@Bean
public PlatformTransactionManager transactionManager(
        EntityManagerFactory emf){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);

    return transactionManager;
}


Properties hibernateProperties() {
    return new Properties() {
        {
            setProperty("hibernate.hbm2ddl.auto",
                   "false");
            setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL82Dialect");
            setProperty("hibernate.globally_quoted_identifiers",
                    "true");
        }
    };
}

Properties additionalProperties() {
    Properties properties = new Properties();
    properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
    properties.setProperty(
            "hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");

    return properties;
}
@Bean
public SpringLiquibase liquibase() {
    SpringLiquibase liquibase = new SpringLiquibase();
    liquibase.setChangeLog("classpath:/db-changelog-master.xml");
    liquibase.setDataSource(dataSource());
    return liquibase;
}





@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
    return new PersistenceExceptionTranslationPostProcessor();
}
}

我希望有人能告诉我缺少什么。

我的客户类如下所示:

@Service
public class DeveloperService {

private static final String DEVELOPER_BASEURL = "http://localhost:8080/backend/api/developer";

public List<DeveloperDTO> getDeveloperList() {
    RestTemplate restTemplate = new RestTemplate();
    DeveloperList response = restTemplate.getForObject(DEVELOPER_BASEURL + "/getAll", DeveloperList.class);
    return response.getDevelopers();
}

public DeveloperDTO getSelectedDeveloper(String name) {
    String url = DEVELOPER_BASEURL + "/get/{name}";
    UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url).queryParam("name", name);
    RestTemplate restTemplate = new RestTemplate();
    DeveloperDTO response = restTemplate.getForObject(builder.toUriString(), DeveloperDTO.class);
    return response;
}

public void delete(String name) {
    String url = DEVELOPER_BASEURL + "/delete/{name}";
    UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url).queryParam("name", name);
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.delete(builder.toUriString());
}

public DeveloperDTO save(DeveloperDTO dto) {
    String url = DEVELOPER_BASEURL + "/save";

    HttpEntity<DeveloperDTO> request = new HttpEntity<>(dto);
    RestTemplate restTemplate = new RestTemplate();
    DeveloperDTO response = restTemplate.postForObject(url, request, DeveloperDTO.class);
    return response;

}
}

预先感谢您的帮助。如果您需要我的项目的任何其他信息,请随时询问。

最佳答案

单独使用@Controller 将无法工作,请使用@Responsebody 在 REST 中获取响应或使用@RestController。

关于java - Spring MVC 后端返回 404 (Rest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52652165/

相关文章:

java - 为什么 Guava 的 ImmutableList 有那么多重载的 of() 方法?

java - 多个作业中的 Spring Batch 相同的步骤名称?

java - 如何在 Spring 事务管理中调用自定义回滚方法?

java - 使用 Spring 的服务器内存上的单个类文件会导致问题

java - 根据应用程序在 jar 中加载 spring bean

java - 使用 fragment 替换布局?

java - 为简单的伪代码语言创建解析器?

java - JWebBrowser(扩展 JPanel)显示在玻璃 Pane 上方

java - RestTemplate.postForObject - 错误 : org. springframework.web.client.HttpClientErrorException:400 错误请求

java - Spring MVC 项目 - 读取 CSV 文件 - HTTP 状态 500 - data.csv(访问被拒绝)