2016-07-08 16 views
5

Bahar MVC bir @RequestParam için bir JSON yükü POST ve argümanları bir demet kabul eden bir DİNLENME bitiş noktası oluşturmak istiyorum nasıl ve bir JSON nesnesi. Bahar kontrolörü olarakBen <strong>Bahar Boot</strong> (en son sürümünü, <strong>1.3.6</strong>) kullanıyorum

curl -X POST http://localhost:8080/endpoint \ 
-d arg1=hello \ 
-d arg2=world \ 
-d json='{"name":"john", "lastNane":"doe"}' 

Şu anda yapıyorum: Böyle bir şey

public SomeResponseObject endpoint(
@RequestParam(value="arg1", required=true) String arg1, 
@RequestParam(value="arg2", required=true) String arg2, 
@RequestParam(value="json", required=true) Person person) { 

    ... 
} 

json argüman bir Person nesnesine tefrika almaz. I String olarak json tartışma yapmak ve kontrol yöntemi içinde yük ayrıştırmak Açıktır ki, bir

400 error: the parameter json is not present. 

olsun, ancak meydan okuyan bu tür Spring MVC kullanarak noktası.

@RequestBody kullanıyorum, ancak daha sonra JSON gövdesi dışındaki bağımsız değişkenleri POST etme olasılığını kaybedersem çalışır.

Spring MVC'de normal POST argümanlarını ve JSON nesnelerini "karıştırmak" için bir yol var mı?

+1

ı don Bir yol olduğunu düşünmüyorum ve form kodlu veri ve json verilerini karıştırmanın iyi bir fikir olduğunu sanmıyorum. Birini veya diğerini kabul etmek isteyip istemediğinize karar verin. –

+1

Pek çok API (Şerit, Ek, Stormpath), istek verilerini mantıksal olarak ayırmak için bu yaklaşımı kullanır (örneğin, bir arama yapıyorumsa, arama kriterlerini bir Json temsiline yerleştirebilir ve sayfa kodlama verilerini formda kodlanmış bitde tutabilirim şeklinde). Ama senin amacını görüyorum. – Luciano

cevap

9

Evet, bir post yöntemi ile hem params ve vücudu göndermek mümkündür: Örnek sunucu tarafı:

@RequestMapping(value ="test", method = RequestMethod.POST) 
@ResponseStatus(HttpStatus.OK) 
@ResponseBody 
public Person updatePerson(@RequestParam("arg1") String arg1, @RequestParam("arg2") String arg2, @RequestBody Person input) throws IOException { 
    System.out.println(arg1); 
    System.out.println(arg2); 
    input.setName("NewName"); 
    return input; 
} 

ve istemci üzerinde:

curl -H "Content-Type:application/json; charset=utf-8" -X POST 'http://localhost:8080/smartface/api/email/test?arg1=ffdfa&arg2=test2' -d '{"name":"me","lastName":"me last"}' 

Enjoy

İlgili konular