Javaの春に2つの異なるオブジェクトを取得するには、コントローラのエンドポイントを作成するには?

JJ Redikes:

私は、javaと春で構築されたサーバーを持っています。

私は何をしようとしていることは同じエンドポイントとの私のコントローラは、2つの異なるオブジェクトを取得することです。

これは私が何を意味するかの例です:

私はそれを行うことができます知っています:

  public class Option1{
   private String name;
   ...
     //getter and setter
    }

public class Option2{
 private Long id;
  ...
//getter and setter
}

@Controller
public class Controller{

 @RequestMapping(value = "service/getData/option1", method = RequestMethod.POST)
 @ResponseBody
 public String searchProv(@ResponseBody Option1 data1){
  return "option1"
   }

@RequestMapping(value = "service/getData/option2", method = RequestMethod.POST)
@ResponseBody
public String searchProv(@ResponseBody Option2 data2){
  return "option2"
  }
}

私はそれが同じエンドポイントに異なるJSONオブジェクトを渡しすることが可能であるかどうか疑問とすることを実行します。

 @Controller
public class Controller{

 @RequestMapping(value = "service/getData", method = RequestMethod.POST)
 @ResponseBody
 public ResponseEntity<Any> getData(@ResponseBody Option1And2 data){
if(data instanceof Option1){
  return return ResponseEntity<Any>(data.name,HttpStatus.OK)
}        
if(data instanceof Option2){
   return ResponseEntity<Any>(data.id,HttpStatus.OK)
}
 return ResponseEntity<Any>("ok",HttpStatus.OK)
  }

このような「Option1And2」であるという一般的なオブジェクトは、オプション1またはオプション2することができます。

私はへの「Option1And2」「どれ」を置換しようとしたが、私はキーと値のリストを取得するので、それがうまくいっていませんでした

タルシャニ:

あなたは使うべきJsonNodeのオブジェクトを。

あなたの例のためにあなたがこれを行う必要があります。

 @Controller
 public class Controller{

 @RequestMapping(value = "service/getData", method = RequestMethod.POST)
 @ResponseBody
 public ResponseEntity<Any> getData(@RequestBody JsonNode jsonNode){

   ObjectMapper obj = new ObjectMapper();

  if(jsonNode.has("name"){
   Option1 result= obj.convertValue(jsonNode,Option1.class)
  return ResponseEntity<Any>(result.name,HttpStatus.OK)
    }    

   else {

   Option2 result= obj.convertValue(jsonNode,Option2.class)
   return ResponseEntity<Any>(result.id,HttpStatus.OK)
    }

    return ResponseEntity<Any>("ok",HttpStatus.OK)
     }

JsonNodeとあなたがここからインポートする必要がありますObjectMapper:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.JsonNode;

このリンクは、あなたがJsonNodeでよりよく理解するのに役立ち、あなたの詳細を与える必要があります。

このリンクは、 Javaオブジェクト(POJO)にJsonNodeからconvertValueのお手伝いをする必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=212103&siteId=1