Spring Rest PostMapping из карты JSON в несколько таблиц - PullRequest
0 голосов
/ 15 января 2019

Я хочу сохранить в базе данных json в формате карты.

Я могу @Getmapping данных из разных несвязанных таблиц в объект json, но я не могу сохранить один и тот же формат json в две таблицы одним способом. вот мой код и JSON:

@RestController
public class NewServiceController {

    @Autowired
    EsbcoreServiceRepository serviceRepo;

    @Autowired
    EsbcoreRuleRepository ruleRepo;

    @Autowired
    EsbcoreServiceDestinationRepository serviceDestinationRepo;

    @GetMapping(value="/api/allservices")
    public Map<String, Object> getAllServices() {       
        Map<String, Object> servicesMap=new HashMap<String, Object>();
        servicesMap.put("services", serviceRepo.findAll());
        servicesMap.put("rules", ruleRepo.findAll());       
        return servicesMap;         
    }

    @PostMapping(value="/api/allservices")
    public Object addnewservice(@RequestBody Map<String, Object> datamap) {
        //Map<String, Object> servicesMap=new HashMap<String, Object>();
        Object esbcoreRule=datamap.get("rules");
        Object esbcoreService=datamap.get("services");
        ruleRepo.save(esbcoreRule);
        //serviceRepo.save(esbcoreService);     
        return datamap;         
    }
}

JSON USED:

{
    "rules":
     [
        {
           "ruleId": 906,
            "ruleOrder": 9,
            "serviceId":
             {
                "serviceId": 908
             }

         } ],
    "services": 
    [

       {
            "serviceId": 908,
            "serviceCode": "0221",
            "systemDomainId": 37,
            "serviceType": "SOAP",
            "serviceName": "Customer",
            "operation": "MandateReActivate",
            "version": "1.0",
            "sync": 1,
            "logLevel": "DEBUG",
            "duplicateCheck": 1,
            "genericReply": 0,
            "timeout": 30,
            "retryMax": 0,
            "retryInterval": 0,
            "prjReleaseCode": "FINTECH_3.0.0",
            "emailAlertGroup": null,
            "smsAlertGroup": null,
            "emailAlertFlag": 1,
            "smsAlertFlag": 1,
            "creationDate": "2018-11-08T04:37:20.000+0000",
            "createdBy": "GGMAINA"
        }
    ]
}

Строка ruleRepo.save(esbcoreRule); обычно сохраняется, когда типом возврата является имя модели / имя объекта базы данных, но в этом случае эта же строка имеет такую ​​ошибку:

Метод save (s) в типе crudrepository неприменимо для аргументов (объекта)

1 Ответ

0 голосов
/ 18 января 2019

Я изменил свой подход, проблема заключалась в приведении типа Object к EsbcoreRule, EsbCoreService и т. Д. Вместо этого я использовал gson, вот мой код:

 @PostMapping(value="/api/allservices")
public Object addnewservice(@RequestBody Map<String, Object> datamap)
{
     //Gson gson= new Gson();
     Gson gson = new GsonBuilder().create();

     Object esbcoreService=datamap.get("services");
     //Object esbcoreServiceT=datamap.get("servicesT");
     Object esbcoreRule=datamap.get("rules");
     Object esbcoreRuleCondition =datamap.get("ruleConditions");
     Object esbcoreRuleDestination=datamap.get("ruleDestinations");
     Object esbcoreServiceDestination=datamap.get("serviceDestinations");



    EsbcoreRule rule= gson.fromJson(esbcoreRule.toString(),EsbcoreRule.class);
    EsbcoreService service=gson.fromJson(esbcoreService.toString(),EsbcoreService.class);
    //EsbcoreService serviceT=gson.fromJson(esbcoreServiceT.toString(),EsbcoreService.class);
    EsbcoreRuleCondition ruleCondition=gson.fromJson(esbcoreRuleCondition.toString(),EsbcoreRuleCondition.class);
    EsbcoreRuleDestination ruleDestination=gson.fromJson(esbcoreRuleDestination.toString(),EsbcoreRuleDestination.class);
    EsbcoreServiceDestination serviceDestination=gson.fromJson(esbcoreServiceDestination.toString(),EsbcoreServiceDestination.class);


    serviceRepo.save(service);
    //serviceRepo.save(serviceT);
    ruleRepo.save(rule);
    ruleConditionRepo.save(ruleCondition);
    ruleDestinationRepo.save(ruleDestination);
    serviceDestinationRepo.save(serviceDestination);





    return datamap;

}
...