2016-10-14 12 views
0

私の春データRESTアプリでは、私は、次のコントローラがあります。Spring Data RESTコントローラで要求パラメータを適切に処理する方法は?

@RestController 
    @RequestMapping("/people") 
    public class PersonController { 
     @RequestMapping(value = "/**", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 
     public ResponseEntity<String> savePerson(@RequestBody Person person, UriComponentsBuilder b, @RequestParam Map<String, ?> id) { 


      UriComponents uriComponents = 
        b.path("/people/{id}").buildAndExpand(id); 
      HttpHeaders responseHeaders = new HttpHeaders(); 
       responseHeaders.setLocation(uriComponents.toUri()); 
       responseHeaders.set("MyResponseHeader", "MyValue"); 
      return new ResponseEntity<String>("Hello World\n\n", responseHeaders, HttpStatus.CREATED); 
     } 
    } 

私は次のポストます

curl -i -X POST -H "Content-Type:application/json" -d '{ "firstName" : "Frodo", "lastName" : "Baggins" }' http://localhost:8080/people 

を、私はこのエラーを取得する:

{"timestamp":1476418616900,"status":500,"error":"Internal Server Error","exception":"java.lang.IllegalArgumentException","message":"Map has no value for 'id'","path":"/people"} 

は何べき私はこのエラーを修正するために変更しますか?あなたがidに合格していない

+0

あなたは正しいです。ありがとう! –

答えて

1

しかし、このURLはlocalhost:8080/people/123

ノートでなければなりません - 123 @Parth Solankiはlocalhostと述べたようにid

0

です:8080 /人/ 123この問題を解決します。しかし、これは十分なRESTfulではありません。それは投稿なので、URLからIDを削除するように、コントローラのメソッドとパラメータのURLマッピングを変更することをお勧めします。 または、同じコードを保ち、POSTの代わりにPUTにメソッドを変更してください。私は後者をしません。これは、リソースのIDを事前に知っている消費者と、すでに存在するエンティティの更新ではなく作成を必要とするためです。

関連する問題