簡體   English   中英

Spring MVC后端返回404(Rest)

[英]Spring MVC backend returns 404 (Rest)

我希望有人可以幫助我解決我的問題。 我現在寫一個Spring MVC Server和一個客戶端。 不幸的是,我的Rest Controller僅返回404。我正在使用Tomcat8。我知道Spring應用程序已正確部署,因為我可以訪問index.jsp頁面。 部署它的上下文是/ backend。 所以我的基本網址是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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM