web-dev-qa-db-ja.com

春にmultipartと@RequestBodyを一緒に使用できますか?

マルチパートファイルおよびJSONオブジェクト(@RequestBody)としてパラメーターを持つことができるAPIを作成したいと思います。このAPIを呼び出しているときに、次のスニペットを見つけてください。415HTTPエラーが発生します。 「@RequestBodyLabPatientInforeportData」を削除すると、正常に機能します。

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

以下は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;

aPIを押している間、アップロードされたファイルで次のJSONオブジェクトを渡します。

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

以下のように@RequestPartを使用できます。これは、jsonオブジェクトとマルチパートファイルの両方をサポートします。

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

curl を使用してテストするために、jsonパーツ用に1つのファイルを作成できます(reportData)。たとえば、「mydata.json」ファイルを作成し、その中にjsonペイロードを貼り付けたとします。そして、あなたのreportFileが "report.txt"であるとしましょう。これで、以下のようにcurlを使用してリクエストを送信できます。

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
10
abaghel

パラメータに@RequestPartアノテーションが付けられると、パーツのコンテンツがHttpMessageConverterを介して渡され、リクエストパーツの「Content-Type」を念頭に置いてメソッド引数が解決されます。これは、@ RequestBodyが通常のリクエストの内容に基づいて引数を解決するために行うことと類似しています。

したがって、@ Requestbodyを@RequestPartとして「abaghel」として解析でき、reportDataはjsonファイルである必要があります。

0
WGSSAMINTHA

Spring Roo 2.0.0.M3には、REST APIの自動スキャフォールディングのサポートが含まれています。

詳細については、リファレンスマニュアルの REST API を参照してください。

M3バージョンは、新しいバージョンで変更される可能性のあるアーティファクトを生成するため、RC1以降でプロジェクトを開いた場合、プロジェクトが自動的にアップグレードされない可能性があることに注意してください。

フォースがあなたと共にありますように。

0
eruiz