如何从服务和数据库中获取数据并将post数据发送到服务器?

dfddblmv  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(441)

我使用restemplatejson从服务和数据库获取数据,然后将post发送到服务器。我对 Postman 做了测试,结果是200分
我的格式json:

  1. {
  2. "senderUser": "myemail@gmail.com",
  3. "data": [
  4. {
  5. "actionType": "update-contact",
  6. "data": {
  7. "name": "NakiTa ",
  8. "lastname": "Isumi",
  9. "type": 0,
  10. "title": "ms",
  11. "passport": "123123",
  12. "gender": 1,
  13. "dateOfBirth": "03-01-2021",
  14. "emails": [
  15. {
  16. "value": "test@gmail.com"
  17. }
  18. ],
  19. "phones": [
  20. {
  21. "value": "0902032618"
  22. }
  23. ],
  24. "addresses": [
  25. {
  26. "addressDetail": "Osaka",
  27. "street": "Osaka",
  28. "city": "Osaka",
  29. "state": "JP",
  30. "country": {
  31. "code": "jp",
  32. "name": "Japan"
  33. }
  34. }
  35. ],
  36. "cusFields": [
  37. {
  38. "600f9cb0f02f084bd8a3dcdb": "TEST"
  39. }
  40. ],
  41. "customerType": "company"
  42. }
  43. }
  44. ]
  45. }

我的班级:

  1. @RequestMapping(value = "/getAllCustomerBasic.do", method = RequestMethod.GET)
  2. public ResponseEntity<List<MyClassMap>> getAllCustomerBasic(@RequestParam Map<String, Object> params,
  3. HttpServletRequest request) throws Exception {
  4. LOGGER.debug("groupCode : {}", params.get("custId"));
  5. RestTemplate restTemplate = new RestTemplate();
  6. MappingJackson2HttpMessageConverter jsonHttpMessageConverter = new MappingJackson2HttpMessageConverter();
  7. jsonHttpMessageConverter.getObjectMapper().configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
  8. restTemplate.getMessageConverters().add(jsonHttpMessageConverter);
  9. String url = "https://myservice/6670011cbd4a674458d3b26025/90336429462601e7f3326641898fabd9948b349d";
  10. List<MyClassMap> customerList = customerService.getAllCustomerViewBasicInfo(params); // .selectAccBank(params);
  11. try {
  12. JSONArray arrayParent = new JSONArray();
  13. for(int i=0 ; i<customerList.size() ; i++) {
  14. arrayParent.put(customerList.get(i));
  15. }
  16. JSONObject objectParent = new JSONObject();
  17. objectParent.put("data", arrayParent);
  18. JSONObject objectChild = new JSONObject();
  19. objectChild.put("senderUser", "myemail@gmail.com");
  20. JSONObject objectChildData = new JSONObject();
  21. objectChildData.put("actionType", "update-contact");
  22. HttpHeaders headers = new HttpHeaders();
  23. headers.add("Accept", MediaType.APPLICATION_JSON.toString());
  24. headers.add("Content-Type", MediaType.APPLICATION_JSON.toString());
  25. HttpEntity<String> entity = new HttpEntity<String>(objectParent.toString(), headers);
  26. String result = restTemplate.postForObject(url, entity, String.class);
  27. LOGGER.info(result);
  28. LOGGER.info("header: " + entity.getHeaders());
  29. LOGGER.info("body" + entity.getBody());
  30. }
  31. catch (HttpClientErrorException exception) {
  32. // TODO Auto-generated catch block
  33. exception.printStackTrace();
  34. }
  35. return ResponseEntity.ok(customerList); // customerList jSONObject
  36. }

customerservice将成功地从数据库获取数据,但当我构建和检查数据时,似乎会发生以下异常:

  1. body{"data":{}}

似乎get data为空,无法获取所有数据。如何解决这个问题?非常感谢

zvokhttg

zvokhttg1#

resttemplate自动将序列化为json。您只需定义一个java类,该类具有api所期望的相同属性(并且具有相同类型),并且在postforobject方法中指示该对象与您的类相同,而不是string.class。
例如,如果myclassmap数据与data json数组中的元素具有相同的属性,则可以是:

  1. //You have to add getters and setters and constructor
  2. public Class Request {
  3. private String senderUser;
  4. private List<MyClassMap> data;
  5. }
  6. ClassRequest request= new ClassRequest();
  7. request.setData(customerList);
  8. request.setSenderUser("example");
  9. HttpEntity<ClassRequest> entity = new HttpEntity<ClassRequest>(request, headers);
  10. String result = restTemplate.postForObject(url, entity, ClassRequest.class);

相关问题