web-dev-qa-db-ja.com

エンティティのRestTemplate投稿

Postメソッドが呼び出されますが、プロファイルが空です。このアプローチの何が問題になっていますか? RestTemplateを使用するには@Requestbodyを使用する必要がありますか?

Profile profile = new Profile();
profile.setEmail(email);        
String response = restTemplate.postForObject("http://localhost:8080/user/", profile, String.class);


@RequestMapping(value = "/", method = RequestMethod.POST)
    public @ResponseBody
    Object postUser(@Valid Profile profile, BindingResult bindingResult, HttpServletResponse response) {

    //Profile is null
        return profile;
    }
16
pethel

この方法でプロファイルオブジェクトを作成する必要があります

MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("email", email);

Object response = restTemplate.postForObject("http://localhost:8080/user/", parts, String.class);
15
pethel

MultiValueMapは良い出発点でしたが、私の場合、空のオブジェクトを@RestControllerに投稿しましたが、エンティティ作成と投稿のソリューションは次のようになりました。

HashedMap requestBody = new HashedMap();
requestBody.put("eventType", "testDeliveryEvent");
requestBody.put("sendType", "SINGLE");

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

// Jackson ObjectMapper to convert requestBody to JSON
String json = new ObjectMapper().writeValueAsString(request);
HttpEntity<String> entity = new HttpEntity<>(json, headers);

restTemplate.postForEntity("/generate", entity, String.class);
3
Mihkel Selgal

私の現在のアプローチ:

final Person person = Person.builder().name("antonio").build();

final ResponseEntity response = restTemplate.postForEntity(
         new URL("http://localhost:" + port + "/person/aggregate").toString(),
         person, Person.class);
1
Antonio682