2017-01-09 4 views
0

Ich entwickle eine einfache Spring Boot Basis Ruhe-Anwendung, die auf einem externen Tomcat-Server mit JNDI-Datenquelle bereitgestellt wurde. Wenn ich die Anwendung ausführe, wird die Datenbank erstellt, das heißt, die Anwendung kann die Entity-Klassen lesen und Hibernate-ddl erstellen. Wenn ich jedoch versuche, die Rest-URL vom Postboten zu treffen, wird eine 404-Fehlermeldung zurückgegeben. Dies ist passiert, nachdem ich meine Anwendung auf einen externen Server verschoben habe, als ich den eingebetteten Server benutzte, auf dem ich die URLs treffen konnte. Kann mir jemand helfen herauszufinden, was ich falsch mache?Spring Boot: Rest URL gibt 404 zurück

Main method: 

package com.nb; 

@SpringBootApplication 
public class SpringBootWithSpringDataJpaApplication extends SpringBootServletInitializer{ 

public static void main(String[] args) { 
    SpringApplication.run(SpringBootWithSpringDataJpaApplication.class, args); 
} 

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(SpringBootWithSpringDataJpaApplication.class); 
} 

Controller: 
package com.nb.springboot.topic; 
@RestController 
public class TopicController { 

@Autowired 
private TopicService topicService; 

    @RequestMapping("/topics") 
    public List<Topic> getAllTopics(){ 
     return topicService.getAllTopics(); 
    } 

    @RequestMapping("/topics/{id}") 
    public Topic getTopic(@PathVariable("id") String id){ 
     return topicService.getTopic(id); 
    } 

    @RequestMapping(method=RequestMethod.POST, value="/topics") 
    public void addTopic(@RequestBody Topic topic){ 
     topicService.addTopic(topic); 

    } 

    @RequestMapping(method=RequestMethod.PUT, value="/topics/{id}") 
    public void updateTopic(@RequestBody Topic topic, @PathVariable String id){ 
     topicService.updateTopic(topic, id); 
    } 

    @RequestMapping(method=RequestMethod.DELETE, value="/topics/{id}") 
    public void deleteTopic(@PathVariable String id){ 
     topicService.deleteTopic(id); 
    } 

}

http://localhost:8080/topics/java ---- arbeitet mit Embedded Server

http://localhost8080/topics/java ------ in nicht funktioniert tomcat 8 (extern)

http://localhost8080/SpringBootWithSpringDataJPA/topics/java ---- - funktioniert nicht in tomcat 8 (extern) wo SpringBootWithSpringDataJPA mein Projektname ist.

Die application.properties Datei ist:

spring.datasource.jndi-name = java:/comp/env/jdbc/postgres/springbootDS

spring.jpa.hibernate.ddl-auto = erstellen

spring.jpa.show-sql = true

+0

Ich vermute, dass es da ist, wenn Sie auf einen externen Server bereitstellen es tatsächlich in einem Web-Kontext bereitgestellt wird. Öffnen Sie den Tomcat-Manager, um zu sehen, wie der Kontext aussieht. Ihre URL wird wie folgt aussehen: http: // localhost: 8080/{context}/topics/java –

+0

Wenn Sie maven am meisten verwenden (wenn nicht die Version geändert wird), so etwas wie 'localhost: 8080/SpringBootWithSpringDataJPA-0.0.1-SNAPSHOT/... ' – Patrick

+0

Ohh Vielen Dank. Ich benutze Maven und der Krieg, der generiert wird, hat den Namen SpringBootWithSpringDataJPA-0.0.1-SNAPSHOT. Ich habe vergessen, den Namen zu ändern. Schätze, das war dumm! Vielen Dank !! – nbnb

Antwort

2

Klingt wie Sie den Namen der Anwendung in der uRL fehlt, wie:

localhost:8080/appname/topics/java 

oder wenn Sie Maven sein sollte:

localhost:8080/appnameX.X.X-SNAPSHOT/topics/java... 
+0

Danke! Das war das Problem mit dem URL-Aufruf, ich benutze Maven, damit Krieg mit X.X.X-SNAPSHOT erzeugt wird. Total verpasst. – nbnb

Verwandte Themen