2017-11-12 8 views
0

私はSpringとRESTアプリケーションから始めます。現在、私自身で1つのアプリケーションを開発しています。Spring Boot @RestController no respond

アプリは標準のSpring Bootプロジェクトと同じように分割されています。すべてのコントローラーはwebパッケージに含まれています。 「標準」コントローラの1つは、HTTPリクエストを処理し、HTMLウェブサイトを返すことです。最初のコントローラからのPOST要求に応答するRESTコントローラを追加しましたが、404エラーが表示されます。

コードでどのように見えますか? .jsファイルから

@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() + "}"; 
     } 
    } 
} 

私は残りのコントローラをトリガするAjaxのクエリを送信する、ここでのコードは次のとおりです。

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); 
     } 
    }); 
} 

userIdconsole.logショー既存および右の値、jQueryをしてHTMLから取得されます。

注:ユーザーのリストを表示するための責任がある標準ユーザー@Controllerが存在して、それは動作しますが、問題はRESTコントローラにユーザIDを送信する時に表示されます。 RESTコントローラが存在せず、ブラウザが404 status responseを返すように動作します。 Btwは、ログインするためにSpring Secureを使用します。

誰かに助けてもらえますか?

BRコンラート

答えて

0

問題の関数の引数に基づいて、RESTコントローラはString引数をとり、JSONオブジェクトに解析する必要があります。レスポンスもStringでなければなりません。トピックは閉じられていて、関与してくれてありがとう。

0

コントローラは、URL

/users/user?userId=1 
+0

私は多くの可能性をチェックしますが、まだ結果はありません。上記のリクエストパラメータを送信する必要があるjsファイルをどのように再構築するか考えていますか? – okarmusk

0

を要求jsの中で、あなたが不足しているリクエストパラメータを持つように探しているあなたは、以下のようにidでユーザーを取得することができます:

@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); 
} 

残りのエントリポイントは/ users/useridです。例:/ users/1

FoundこれはポストからSpring MVC RESTFul Web Service CRUD Example

関連する問題