2017-11-12 4 views
0

Ich fange mit Spring und REST Anwendung. Momentan entwickle ich eine eigene Anwendung und bin dabei geblieben.Spring Boot @RestController keine Antwort

Die App ist genau wie Standard-Spring-Boot-Projekt unterteilt. Alle Controller sind im Paket web enthalten. Einer der "Standard" -Controller ist verantwortlich für die Bearbeitung der Anfrage HTTP und die Rückgabe einer HTML Website. Ich habe einen REST Controller hinzugefügt, der auf POST Anfrage von der ersten Steuerung reagieren sollte, aber ich erhalte einen 404 Fehler.

Wie sieht es im Code aus?

@RestController 
@RequestMapping("/users") 
public class UserRestController { 
    @Autowired 
    private UserService userService; 


    @RequestMapping(value = "/user", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") 
    public ResponseEntity<?> getUser(@RequestParam("userId") String userId, Errors errors) { 
     AjaxUser response = new AjaxUser(); 

     if (errors.hasErrors()) { 
      response.message = errors.getAllErrors().stream().map(x -> x.getDefaultMessage()).collect(Collectors.joining(",")); 

      return ResponseEntity.badRequest().body(response); 

     } 

     response.setUser(userService.getUserById(Integer.getInteger(userId).intValue())); 

     return ResponseEntity.ok(response); 

    } 

    private class AjaxUser { 
     private User user; 
     private String message; 

     public void setUser(User user) { 
      this.user = user; 
     } 

     public void setMessage(String message) { 
      this.message = message; 
     } 

     public String getMessage() { 
      return message; 
     } 

     @Override 
     public String toString() { 
      return "User { id:" + user.getId() + ", Name: " + user.getName() + ", surname: " + user.getSurname() + "}"; 
     } 
    } 
} 

Von js-Datei ich eine Ajax-Abfrage senden, die einen Rest Controller auslösen sollte, hier ist der Code:

function sendUserId(id) { 
    var user = {}; 
    user["userId"] = id; 

    console.log("USER: ", user); 

    $.ajax({ 
     type: "POST", 
     contentType: "application/json", 
     url: "https://stackoverflow.com/users/user", 
     data: JSON.stringify(user), 
     dataType: 'json', 
     cache: false, 
     timeout: 100000, 
     success: function (user) { 

      var json = "<h4>Ajax Response</h4><pre>" 
       + JSON.stringify(user, null, 4) + "</pre>"; 

      console.log("SUCCESS : ", user); 

     }, 
     error: function (e) { 

      var json = "<h4>Ajax Response</h4><pre>" 
       + e.responseText + "</pre>"; 

      console.log("ERROR : ", e); 
     } 
    }); 
} 

userId von einem html von jQuery genommen wird, console.log zeigen bestehenden und richtigen Wert .

Hinweis: Es gibt einen Standard-Benutzer @Controller die zum Anzeigen einer Benutzerliste zuständig ist, es funktioniert, Problem erscheint während eines Benutzer-ID REST Controller senden. Es verhält sich genau wie der REST Controller nicht vorhanden ist und der Browser 404 status response zurückgibt. BTW, Seite verwenden ein Spring Secure, um sich anzumelden und so weiter.

Könnte jemand helfen?

BR Konrad

Antwort

0

das Problem basierend auf Funktionsargumente, REST-Controller sollte String-Argument nehmen und als nächstes analysieren es JSON-Objekt, sollte die Antwort String auch sein. Das Thema kann geschlossen werden, danke an alle Beteiligten.

0

Der Controller sucht einen Anforderungsparameter zu haben, die Sie in den js fehlen url

/users/user?userId=1 
+0

Ich überprüfe viele Möglichkeiten, aber immer noch kein Ergebnis. Hast du eine Idee, wie ich meine js-Datei neu erstellen soll, die den erwähnten Anfrageparameter senden soll? – okarmusk

0

anfordernden Sie können wie unter einem Benutzer von ID erhalten:

@RequestMapping(value = "{id}", method = RequestMethod.GET) 
public ResponseEntity<User> get(@PathVariable("id") int id) { 
User user = userService.findById(id); 

if (user == null) { 
return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 
} 

return new ResponseEntity<User>(user, HttpStatus.OK); 
} 

Ihr Ruhepunkt ist also/users/userid, zB:/users/1

Gefunden Dies aus dem Post Spring MVC RESTFul Web Service CRUD Example

Verwandte Themen