স্প্রিং রেস্টটেম্পলেট দিয়ে কীভাবে ফর্ম ডেটা পোস্ট করবেন?


147

আমি নিম্নলিখিত (কর্মক্ষম) কার্ল স্নিপেটকে একটি রেস্টটেম্পলেট কলটিতে রূপান্তর করতে চাই:

curl -i -X POST -d "email=first.last@example.com" https://app.example.com/hr/email

আমি কীভাবে ইমেল প্যারামিটারটি সঠিকভাবে পাস করব? নিম্নলিখিত কোডের ফলাফল একটি 404 পাওয়া যায়নি প্রতিক্রিয়া:

String url = "https://app.example.com/hr/email";

Map<String, String> params = new HashMap<String, String>();
params.put("email", "first.last@example.com");

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity( url, params, String.class );

আমি পোস্টম্যানে সঠিক কলটি তৈরি করার চেষ্টা করেছি এবং আমি ইমেলের পরামিতিটি শরীরে "ফর্ম-ডেটা" প্যারামিটার হিসাবে নির্দিষ্ট করে এটি সঠিকভাবে কাজ করতে পারি। বিশ্রামবারে এই কার্যকারিতাটি অর্জন করার সঠিক উপায় কী?


রেস্ট টেম্পলেট.এক্সচেঞ্জ () চেষ্টা করুন;
আমরা

আপনি এখানে সরবরাহ করেছেন এমন ইউআরএলের গ্রহণযোগ্য সামগ্রী কী?
থারসান শিবকুমার

এই ব্লগটি দেখুন যা একই জিনিসটি করার চেষ্টা করছে বলে আমার মনে হয় techie-
मिश्रण

@ থারসানসিভাকুমার ইউআরএল জেএসএন ফিরিয়ে দেবে।
সিম

উত্তর:


355

পোষ্ট পদ্ধতিটি এইচটিটিপি অনুরোধের সাথে প্রেরণ করা উচিত। এবং অনুরোধে HTTP শিরোনাম বা এইচটিটিপি বডি বা উভয়ই থাকতে পারে।

সুতরাং আসুন একটি এইচটিটিপি সত্তা তৈরি করি এবং শিরোনাম এবং শরীরে পরামিতি প্রেরণ করি।

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

MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("email", "first.last@example.com");

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);

ResponseEntity<String> response = restTemplate.postForEntity( url, request , String.class );

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#postForObject-java.lang.String-java.lang.Object-java.lang। ক্লাস-java.lang.Object ...-


1
আপনি এই লিঙ্কটি আরও তথ্যের জন্যও
থারসান শিবকুমার

1
আপনি আমার দিনটি বাঁচিয়েছেন, আমি প্রত্যাশা করেছি যে রিস্টেম্প্লেট ব্যবহার করা বেশ সুস্পষ্ট, তবে কিছু কৌশল আছে!
সের্গেই গেটম্যান

1
ResponseEntity<String> response = new RestTemplate().postForEntity(url, request, String.class);আমি পাচ্ছিorg.springframework.http.converter.HttpMessageNotWritableExc‌​eption: Could not write content: No serializer found for class java.util.Collections$3
শিবকুমার মল্লস্প্পা

যখন অন্যরা স্ট্রিং হয় তখন কীভাবে বডি প্যারামিটারটি পাস করতে হয় তবে তার মধ্যে একটি স্ট্রিং টাইপ করা হয় [], যেমন নীচের অনুরোধের তথ্য argscurl -X POST --data '{"file": "/xyz.jar", "className": "my.class.name", "args": ["100"]}' -H "Content-Type: application/json" localhost:1234/batches
স্ট্রিংয়ের

2
সুতরাং এটি কেবল স্ট্রিংয়ের জন্যই কাজ করে ... আমি যদি পে-লোডে জাভা অবজেক্টটি প্রেরণ করতে চাই?
devssh

23

মিশ্রিত ডেটা কীভাবে পোস্ট করবেন: ফাইল, স্ট্রিং [], একটি অনুরোধে স্ট্রিং।

আপনি যা প্রয়োজন কেবল তা ব্যবহার করতে পারেন।

private String doPOST(File file, String[] array, String name) {
    RestTemplate restTemplate = new RestTemplate(true);

    //add file
    LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    params.add("file", new FileSystemResource(file));

    //add array
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://my_url");
    for (String item : array) {
        builder.queryParam("array", item);
    }

    //add some String
    builder.queryParam("name", name);

    //another staff
    String result = "";
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);

    HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity =
            new HttpEntity<>(params, headers);

    ResponseEntity<String> responseEntity = restTemplate.exchange(
            builder.build().encode().toUri(),
            HttpMethod.POST,
            requestEntity,
            String.class);

    HttpStatus statusCode = responseEntity.getStatusCode();
    if (statusCode == HttpStatus.ACCEPTED) {
        result = responseEntity.getBody();
    }
    return result;
}

পোস্টের অনুরোধটির বডি এবং পরবর্তী কাঠামোতে ফাইল থাকবে:

POST https://my_url?array=your_value1&array=your_value2&name=bob 

আমি এই পদ্ধতিটি চেষ্টা করেছিলাম কিন্তু আমার পক্ষে কাজ করে নি। আমি মাল্টিপার্ট ফরম্যাটে ডেটা সহ একটি পোষ্ট অনুরোধ করার সমস্যার মুখোমুখি। এখানে যদি আপনি কি আমাকে একটা সমাধান সঙ্গে গাইড পারে আমার প্রশ্ন stackoverflow.com/questions/54429549/...
ডীপ Lathia

8

স্প্রিংয়ের রেস্টটেম্পলেট ব্যবহার করে একটি পোষ্ট রেস্ট কল করার সম্পূর্ণ প্রোগ্রাম এখানে।

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import com.ituple.common.dto.ServiceResponse;

   public class PostRequestMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
        Map map = new HashMap<String, String>();
        map.put("Content-Type", "application/json");

        headers.setAll(map);

        Map req_payload = new HashMap();
        req_payload.put("name", "piyush");

        HttpEntity<?> request = new HttpEntity<>(req_payload, headers);
        String url = "http://localhost:8080/xxx/xxx/";

        ResponseEntity<?> response = new RestTemplate().postForEntity(url, request, String.class);
        ServiceResponse entityResponse = (ServiceResponse) response.getBody();
        System.out.println(entityResponse.getData());
    }

}

7
ফর্ম ডেটার পরিবর্তে অ্যাপ্লিকেশন /
জসন

ResponseEntity<?> response = new RestTemplate().postForEntity(url, request, String.class);। আমি পাচ্ছিorg.springframework.http.converter.HttpMessageNotWritableException: Could not write content: No serializer found for class java.util.Collections$3
শিবকুমার মল্লাস্প্পা

আপনি কি দয়া করে আপনার পুরো প্রোগ্রামটি ভাগ করে নিতে পারেন বা আমাকে জানান যে আমি কিছু নমুনা নমুনা প্রোগ্রামটি ভাগ করব @ শিবকুমারমল্লাস্প্পা
মিত্তাল

যদি আপনি application/jsonবিষয়বস্তুর প্রকারটি প্রতিস্থাপন করেন তবে application/x-www-form-urlencodedআপনি org.springframework.web.client.RestClientException পাবেন: java.util.HashMap এর জন্য কোনও HTTPMessageConverter এবং অ্যাপ্লিকেশন / x-www-form-urlencoded নয় - দেখুন stackoverflow.com/q / 31342841/355438
লু 55

-3

আপনার ইউআরএল স্ট্রিংয়ের যে মানচিত্রটি আপনি কাজ করতে চান তার জন্য পরিবর্তনশীল মার্কার প্রয়োজন, যেমন:

String url = "https://app.example.com/hr/email?{email}";

অথবা আপনি স্পষ্টভাবে ক্যারিয়ারের প্যারামগুলি স্ট্রিংয়ের সাথে শুরু করতে কোড করতে পারেন এবং মানচিত্রটি মোটেও পাস করতে হবে না, যেমন:

String url = "https://app.example.com/hr/email?email=first.last@example.com";

এছাড়াও https://stackoverflow.com/a/47045624/1357094 দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.