Я надеюсь, что кто-то может помочь мне с моей проблемой.Я сейчас пишу Spring MVC Server и клиент.К сожалению, мой 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;
}
}
Заранее благодарю за помощь.Если вам нужна какая-либо другая информация из моего проекта, не стесняйтесь спрашивать.