2016-12-02 6 views
1

Ich möchte eine API erstellen, die Parameter als mehrteilige Datei und JSON-Objekt (@RequestBody) haben kann. Bitte finden Sie folgendes Snippet beim Aufruf dieser API bekomme ich 415 HTTP-Fehler. Wenn ich "@RequestBody LabPatientInfo reportData" entferne, funktioniert es einwandfrei.Können wir multipart und @RequestBody im Frühling zusammen verwenden?

@RequestMapping(value={"/lab/saveReport"}, method={RequestMethod.POST}, 
      consumes={"multipart/form-data"}, headers={"Accept=application/json"}) 
    @ResponseBody 
    public ResponseEntity<String> 
    saveReport(@RequestParam(value="reportFile") MultipartFile reportFile, 
       @RequestBody LabPatientInfo reportData) throws IOException { 
     HttpHeaders headers = new HttpHeaders(); 
     headers.add("Content-Type", "application/json; charset=utf-8"); 
     logger.info("in Lab Save Report"); 
     logger.info("Report Data {} ", reportData); 
     //logger.info("Request BODY {} ", request.getAttribute("data")); 
     return new ResponseEntity<String>(HttpStatus.OK); 
    } 

ist die Klasse LabPatientInfo.

@RooJson(deepSerialize = true) 
@RooToString 
public class LabPatientInfo { 

    private String firstName; 
    private String phoneNumber; 
    private String DateOfBirth; 
    private Integer age; 
    private String gender; 
    private String refferedBy; 
    private String reportfile; 
    private String reportType; 
    private String reportDate; 
    private String purpose; 
    private String followUpDate; 
    private List<ReportDataInfo> analytes; 

während API schlagen Ich bin vorbei folgenden JSON-Objekt mit hochgeladenen Datei ..

{ 
    "firstName":"abc", 
    "phoneNumber":"898989", 
    "DateOfBirth":"asas", 
    "age":"asas", 
    "gender":"asas", 
    "refferedBy":"asas", 
    "reportfile":"asas", 
    "reportType":"asas", 
    "reportDate":"asas", 
    "purpose":"asas", 
    "followUpDate":"asas", 
    "analytes":null 
} 

Antwort

2

Sie können @RequestPart wie unten verwenden. Dies unterstützt sowohl Json-Objekt als auch Multipart-Datei.

@ResponseBody 
public ResponseEntity<String> 
saveReport(@RequestPart (value="reportFile") MultipartFile reportFile, 
      @RequestPart LabPatientInfo reportData) throws IOException { 

Um es zu testen curl verwenden Sie eine Datei für Ihren json Teil erstellen (report). Sagen Sie zum Beispiel, Sie erstellen "mydata.json" -Datei und fügen Sie Ihre Json-Nutzlast darin ein. Und sagen Sie, Ihr reportFile ist "report.txt". Jetzt können Sie eine Anfrage mit curl wie unten senden.

curl -v -H "Content-Type:multipart/form-data" -F "[email protected];type=application/json" -F "[email protected];type=text/plain" http://localhost:8080/MyApp/lab/saveReport 
+0

Ja, das wird funktionieren –

+0

Hey ich oben genannten Code verwendet und bekam jetzt HTTP-Status 400 - Erforderliche Anfrage Teil 'reportData' ist nicht vorhanden. – Mayur

+0

@mayur Wie senden Sie die Anfrage? Sie können versuchen, Curl zu verwenden. Ich habe meine Antwort oben mit Details aktualisiert. Bitte prüfe. – abaghel

0

Spring Roo 2.0.0.M3 enthält Unterstützung für das automatische Gerüst einer REST-API.

Weitere Informationen finden Sie im Referenzhandbuch unter REST API.

Beachten Sie, dass die M3-Version Artefakte generiert, die sich in neueren Versionen ändern können. Daher wird Ihr Projekt möglicherweise nicht automatisch aktualisiert, wenn Sie es mit RC1 oder höher öffnen.

Möge die Macht mit dir sein.

Verwandte Themen