Spring MVC Backend возвращает 404 (Отдых) - PullRequest
0 голосов
/ 04 октября 2018

Я надеюсь, что кто-то может помочь мне с моей проблемой.Я сейчас пишу 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;

}
}

Заранее благодарю за помощь.Если вам нужна какая-либо другая информация из моего проекта, не стесняйтесь спрашивать.

1 Ответ

0 голосов
/ 04 октября 2018

@ Один только контроллер не будет работать, пожалуйста, используйте @Responsebody, чтобы получить ответ в REST, или используйте @ RestController.

...