2017-12-03 11 views
1

JSocketをTomcatサーバーに正しく送信しているように見えるAngularJS Webアプリケーションがありますが、サーバーはnull値を受け取ります。 という表記があるので、私のプロパティ名は既に小文字で、this questionは役に立たなかったので、This questionは役に立ちませんでした。 編集:コメントに指摘されているように、私は実際にこの記法を持っていません。私はそれを間違って読んでいた。ここでSpring POSTがnull値を持つオブジェクトを受け取ります

は、問題のサーバーメソッドです:

var uri = 'http://localhost:8080/catalog/api/kind/'; 

function create(name) { 
    var deferred = $q.defer(); 
    var data = { 
     'name': name 
    }; 
    $http({ 
     method: 'POST', 
     url: uri + 'add', 
     data: angular.toJson(data), 
     headers: { 
      'Content-Type': 'application/json; charset=UTF-8' 
     } 
    }).then(function(response) { 
     deferred.resolve(response.data); 
    }).catch(function(error) { 
     console.error('Error while adding kind'); 
     deferred.reject(error); 
    }); 
    return deferred.promise; 
} 
:ここ
@Entity 
public class Kind { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 
    private String name; 
    @OneToMany(mappedBy="kind") 
    private Set<Card> cards; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Set<Card> getCards() { 
     return cards; 
    } 

    public void setCards(Set<Card> cards) { 
     this.cards = cards; 
    } 
} 

が要求を行う方法であって、ここで

@PostMapping(path="/kind/add") 
public @ResponseBody String addNewKind(Kind kind) throws Exception { 
    if (kind.getName() == null) { 
     throw new Exception("Name not found."); 
    } 
    kindRepository.save(kind); 
    return "Saved"; 
} 

それが受信することを期待種類のオブジェクトがあります

これはサーバーに送信されたJSONです。

{"name":"Something"} 

N.B.私はidまたはcardsパラメータを送信せずに離れることができると仮定しました。これはidが自動生成され、cardsが空である可能性があるためです。以下のJSONを送信するときしかし、私は同じヌル結果を得る:

Accept:   application/json, text/plain, */* 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.5 
Connection:  keep-alive 
Content-Length: 20 
Content-Type:  application/json; charset=UTF-8 
Cookie:   __distillery=08c4ef1_752470a4-…ID=lr9remoqoi0ht13v1urq5lq8r7 
Host:    localhost:8080 
Referer:   http://localhost:8080/catalog/ 
User-Agent:  Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0 

そして、これは私がデバッグでkindオブジェクト引数を表示したときに、サーバーが受け取るものです:

{"id":0,"name":"Something","cards":[]} 

これらは、リクエストヘッダですモード:

kind= Kind 
    cards= null 
    id= 0 
    name= null 
+0

_ "私はすでに@RequestBody表記を持っているので" _ - どこ?私は '@ ResponseBody'しか見ることができません。 – helospark

+0

@helosparkあなたは正しいです、どのように恥ずかしい!私は '@ RequestBody'を見て、' @ ResponseBody'を読んでいました。 – catholiccomposer

答えて

0

あなたのメソッドに@RequestBody注釈を使用する必要があります。あなたのコントローラーはボディが何であるかを知らないので、あなたの投稿されたオブジェクトは決してあなたのメソッドのKindパラメーターに束縛されません。

@PostMapping(path="/kind/add") 
public String addNewKind(@RequestBody Kind kind) throws Exception { 
    if (kind.getName() == null) { 
     throw new Exception("Name not found."); 
    } 
    kindRepository.save(kind); 
    return "Saved"; 
} 

あなたは新しい「種類」は返されることを期待している場合、あなたは、コントローラのメソッドは次のようになりたいと思います:サイドノートで

@PostMapping(path="/kind/add") 
public Kind addNewKind(@RequestBody Kind kind) throws Exception { 
    if (kind.getName() == null) { 
     throw new Exception("Name not found."); 
    } 
    return kindRepository.save(kind); 
} 

を、私はあなたが単一使用しているに気づきますあなたのJSONを引用するときにそれを書き出します。 angular.toJson()でデータを変換しているので、そこにはOKです。 JSON文字列を直接送信して対話しようとしている場合、これは一般的には機能しません。 JSONは一重引用符を使用しません。

+0

ありがとうございます。私は上記のJSONを編集していますので、将来誰かに質問を読んでも分かりません。 – catholiccomposer

関連する問題