কে স্প্রিং এমভিসিতে প্রতিক্রিয়া বিষয়বস্তু সেট করে (@ রেসপন্সবডি)


126

আমি আমার টিকাটি চালিত স্প্রিং এমভিসি জাভা ওয়েব অ্যাপ্লিকেশনটি জেটি ওয়েব সার্ভারে চালিত করছি (বর্তমানে ম্যাভেন জেটি প্লাগইনে রয়েছে)।

আমি কেবল স্ট্রিং সহায়তা পাঠ্য ফিরে আসার একটি নিয়ামক পদ্ধতিতে কিছু AJAX সহায়তা করার চেষ্টা করছি। সংস্থানগুলি ইউটিএফ -8 এনকোডিংগুলিতে রয়েছে এবং একই স্ট্রিংটি রয়েছে তবে সার্ভার থেকে আমার প্রতিক্রিয়া আসে

content-encoding: text/plain;charset=ISO-8859-1 

এমনকি যখন আমার ব্রাউজারটি প্রেরণ করে

Accept-Charset  windows-1250,utf-8;q=0.7,*;q=0.7

আমি কোনওভাবে বসন্তের ডিফল্ট কনফিগারেশন ব্যবহার করছি

আমি এই শিমটি কনফিগারেশনে যুক্ত করার জন্য একটি ইঙ্গিত পেয়েছি, তবে আমি মনে করি এটি কেবল ব্যবহৃত হয়নি, কারণ এটি বলে যে এটি এনকোডিং সমর্থন করে না এবং এর পরিবর্তে একটি ডিফল্ট ব্যবহার করা হয়েছে।

<bean class="org.springframework.http.converter.StringHttpMessageConverter">
    <property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>

আমার নিয়ামক কোডটি (দ্রষ্টব্য যে প্রতিক্রিয়ার ধরণের এই পরিবর্তনটি আমার পক্ষে কাজ করছে না):

@RequestMapping(value = "ajax/gethelp")
public @ResponseBody String handleGetHelp(Locale loc, String code, HttpServletResponse response) {
    log.debug("Getting help for code: " + code);
    response.setContentType("text/plain;charset=UTF-8");
    String help = messageSource.getMessage(code, null, loc);
    log.debug("Help is: " + help);
    return help;
}

উত্তর:


59

StringHttpMessageConverterশিমের সরল ঘোষণা যথেষ্ট নয়, আপনার এটিতে ইনজেকশন দেওয়া দরকার AnnotationMethodHandlerAdapter:

<bean class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <array>
            <bean class = "org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
            </bean>
        </array>
    </property>
</bean>

যাইহোক, এই পদ্ধতিটি ব্যবহার করে আপনাকে সমস্তগুলি নতুনভাবে সংজ্ঞায়িত করতে হবে HttpMessageConverter, এবং এটিও কাজ করে না <mvc:annotation-driven />

সুতরাং, সম্ভবত সবচেয়ে সুবিধাজনক তবে কুরুচিপূর্ণ পদ্ধতি হ'ল এর সাথে ইনস্ট্যান্টেশন বন্ধ AnnotationMethodHandlerAdapterকরা BeanPostProcessor:

public class EncodingPostProcessor implements BeanPostProcessor {
    public Object postProcessBeforeInitialization(Object bean, String name)
            throws BeansException {
        if (bean instanceof AnnotationMethodHandlerAdapter) {
            HttpMessageConverter<?>[] convs = ((AnnotationMethodHandlerAdapter) bean).getMessageConverters();
            for (HttpMessageConverter<?> conv: convs) {
                if (conv instanceof StringHttpMessageConverter) {
                    ((StringHttpMessageConverter) conv).setSupportedMediaTypes(
                        Arrays.asList(new MediaType("text", "html", 
                            Charset.forName("UTF-8"))));
                }
            }
        }
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String name)
            throws BeansException {
        return bean;
    }
}

-

<bean class = "EncodingPostProcessor " />

10
এটি একটি নোংরা হ্যাক মত মনে হচ্ছে। আমি এটি ব্যবহার না করে পছন্দ করি না। বসন্ত কাঠামো বিকাশকারীদের এই ক্ষেত্রে কাজ করা উচিত!
digz6666

<বিন শ্রেণি = "এনকোডিংপোস্টপ্রসেসর" /> লাইনটি কোথায় যায়?
জোড

1
@ জোড: DispatcherServletএর কনফিগারেশনে ( ...-servlet.xml)
অ্যাক্সটভিট

ধন্যবাদ। এটি উপেক্ষা করা হবে বলে মনে হয়। আমরা এমভিসি (আমার মনে হয়) ব্যবহার করছি এবং আমাদের সাথে একটি @ কন্ট্রোলার বৈশিষ্ট্যযুক্ত একটি ক্লাস রয়েছে, এটি এন্ট্রি পয়েন্ট হিসাবে উপস্থিত বলে মনে হচ্ছে। ক্লাসটি অন্য কোথাও উল্লেখ করা হয়নি (এটির সাথে একই নামের একটি ইন্টারফেস রয়েছে) তবে এটি তাত্ক্ষণিকভাবে সঠিকভাবে বলা হয়। @RequestMapping বৈশিষ্ট্যের সাথে পাথগুলি ম্যাপ করা হয়। আমরা প্রতিক্রিয়াটির সামগ্রী ধরণের নিয়ন্ত্রণ করতে অক্ষম (আমাদের এক্সএমএল প্রয়োজন)। আপনি সম্ভবত বলতে পারেন যে, আমি কী করছি তা সম্পর্কে আমার কোনও ধারণা নেই এবং যে বিকাশকারী এটি তৈরি করেছেন তারা আমার সংস্থান ছেড়ে চলে গেছেন। ধন্যবাদ।
জোড

3
যেমন @ digz6666 বলেছেন এটি এটি একটি নোংরা হ্যাক। বসন্তে জ্যাক্স-আরএস কীভাবে তা দেখে নেওয়া উচিত।
অ্যাডাম জেন্ট

166

আমি স্প্রিং ৩.১ এর সমাধান পেয়েছি। @ রেসপনসবডি টীকা ব্যবহার করে। এখানে জেসন আউটপুট ব্যবহার করে নিয়ামকের উদাহরণ রয়েছে:

@RequestMapping(value = "/getDealers", method = RequestMethod.GET, 
produces = "application/json; charset=utf-8")
@ResponseBody
public String sendMobileData() {

}

7
+1 টি। এটি আমার জন্য এটিও সমাধান করেছে তবে আমি <mvc:annotation-driven/>অ্যাপ্লিকেশনসেক্সটেক্সে ব্যবহার শুরু করার পরেই । (এর পরিবর্তে <bean class=" [...] DefaultAnnotationHandlerMapping"/>, যা যাইহোক স্প্রিংয়ে ৩.২ এ
অবমূল্যায়ন করা হয়েছে

সিএ এইভাবে অ্যাপ্লিকেশন / এক্সএমএল উত্পাদন করে?
হুরদা

2
@ হুরদা: স্পষ্টত আপনি producesবৈশিষ্ট্যের মান পরিবর্তন করে আপনার যে কোনও সামগ্রী প্রকারটি নির্দিষ্ট করতে পারেন ।
জোনিক

1
"অ্যাপ্লিকেশন / জেসসন" এর জন্য একটি মিডিয়াটাইপ রয়েছে AP অ্যাপলিকেশন_জেপিএসএন_ভালু।
দেব

2
ইউটিএফ -8 এর জন্য দেখুন MediaType.APPLICATION_JSON_UTF8_VALUE
ক্যালভিনফ

51

নোট করুন যে স্প্রিং এমভিসি ৩.১ এ আপনি বার্তা রূপান্তরকারীগুলিকে কনফিগার করতে এমভিসি নেমস্পেস ব্যবহার করতে পারেন:

<mvc:annotation-driven>
  <mvc:message-converters register-defaults="true">
    <bean class="org.springframework.http.converter.StringHttpMessageConverter">
      <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
    </bean>
  </mvc:message-converters>
</mvc:annotation-driven>

বা কোড ভিত্তিক কনফিগারেশন:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

  private static final Charset UTF8 = Charset.forName("UTF-8");

  @Override
  public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();
    stringConverter.setSupportedMediaTypes(Arrays.asList(new MediaType("text", "plain", UTF8)));
    converters.add(stringConverter);

    // Add other converters ...
  }
}

কাজের অনুসারে বাছাই করুন, 1 ব্যতীত) এটি Accept-Charsetশিরোনামের সাথে প্রতিক্রিয়াটিকে দূষিত করে যা সম্ভবত প্রতিটি পরিচিত অক্ষর এনকোডিং তালিকাভুক্ত করে, এবং 2) যখন অনুরোধটির Acceptশিরোনাম supportedMediaTypesহয় রূপান্তরকারীর সম্পত্তি ব্যবহৃত হয় না , উদাহরণস্বরূপ যখন আমি অনুরোধটি টাইপ করি সরাসরি একটি ব্রাউজারে URL এর প্রতিক্রিয়াটির Content-Type: text/htmlপরিবর্তে শিরোনাম হয়।
জিউলিও পিয়ানোস্টেল্লি

3
আপনি "পাঠ্য / প্লেইন" হিসাবে যে কোনও উপায়ে ডিফল্ট হিসাবে সরল করতে পারবেন: <bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean>
ইগর মুখিন

এই উত্তরটি সঠিক উত্তর হিসাবে গ্রহণ করা উচিত। এছাড়াও, স্ট্রিংএইচটিপিএমেসেজ কনভার্টারের শিমের কাজগুলি সংজ্ঞায়িত করার জন্য @ ইগরমুখিনের উপায়। এই উত্তরটি সমস্ত সার্লেটের জন্য প্রতিক্রিয়া সামগ্রী-প্রকার সেট করতে ব্যবহৃত হয়। যদি আপনার কেবলমাত্র কোনও নির্দিষ্ট নিয়ামক পদ্ধতির জন্য বিষয়বস্তুর ধরণটি সেট করতে হয় তবে এর পরিবর্তে ওয়ারিয়রের উত্তরটি ব্যবহার করুন (@RequestMapping এ যুক্তি উত্পন্ন করে)
পিকবয়

3
@ গিউলিওপিয়ানাস্টেললি আপনার প্রথম প্রশ্নটি শিমের সাথে <সম্পত্তি নাম = "writeAcceptCharset" মান = "মিথ্যা" /> যোগ করে সমাধান করা যেতে পারে
পিকবয়

44

কেবলমাত্র আপনি নিম্নলিখিত উপায়ে এনকোডিং সেট করতে পারেন:

@RequestMapping(value = "ajax/gethelp")
public ResponseEntity<String> handleGetHelp(Locale loc, String code, HttpServletResponse response) {
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.add("Content-Type", "text/html; charset=utf-8");

    log.debug("Getting help for code: " + code);
    String help = messageSource.getMessage(code, null, loc);
    log.debug("Help is: " + help);

    return new ResponseEntity<String>("returning: " + help, responseHeaders, HttpStatus.CREATED);
}

আমি মনে করি স্ট্রিংএইচটিপিএমেসেজ কনভার্টার এর চেয়ে ভাল।


আপনি যদি the manifest may not be valid or the file could not be opened.আই ১১ এ ত্রুটি পান তবে এটি সমাধানও হ'ল ধন্যবাদ ডিজেজ!
অরুণ ক্রিস্টোফার

21

আপনি অনুরোধম্যাপিংয়ে উত্পাদন = "পাঠ্য / সমতল; চরসেট = ইউটিএফ -8" যুক্ত করতে পারেন

@RequestMapping(value = "/rest/create/document", produces = "text/plain;charset=UTF-8")
@ResponseBody
public String create(Document document, HttpServletRespone respone) throws UnsupportedEncodingException {

    Document newDocument = DocumentService.create(Document);

    return jsonSerializer.serialize(newDocument);
}

আরও বিস্তারিত জানার জন্য এই ব্লগ দেখুন


2
এই কোডটি সংকলন করবে না; আপনি শূন্য পদ্ধতি থেকে কিছু ফিরিয়ে দিচ্ছেন।
অ্যান্ড্রু সোয়ান

2
দুঃখিত খারাপ বাগ, এটি এখনই ঠিক করা হয়েছে
চার্লি উ

3
এটি একটি ভুল উত্তর। স্প্রিং ডক্স অনুসারে: ম্যাপ করা অনুরোধের উত্পাদনযোগ্য মিডিয়া ধরণের, প্রাথমিক ম্যাপিং সংকীর্ণ করে। ফর্ম্যাটটি মিডিয়া প্রকারের ("পাঠ্য / প্লেইন", "অ্যাপ্লিকেশন / *) এর অনুক্রম, কেবল অনুরোধের সাথে ম্যাপ করা হয় যদি स्वीकार করুন এই মিডিয়া ধরণের একটির সাথে মিলে যায় তবে"! "অপারেটরটি ব্যবহার করে এক্সপ্রেশনকে তুচ্ছ করা যেতে পারে "! পাঠ্য / সাধারণ", যা তুলনায় "টেক্সট / প্লেইন" একটি অন্যান্য স্বীকার সঙ্গে সব অনুরোধ মেলে।
Oleksandr_DJ

@ চর্লিউইউ লিঙ্কটি নিয়ে একটি সমস্যা আছে
ম্যাট

10

আমি সম্প্রতি এই সমস্যাটিতে লড়াই করেছিলাম এবং স্প্রিং ৩.১ এ আরও একটি ভাল উত্তর পাওয়া গেছে:

@RequestMapping(value = "ajax/gethelp", produces = "text/plain")

সুতরাং, জ্যাক্স-আরএসের মতো সহজ, সমস্ত মন্তব্য যেমন ইঙ্গিত করেছে / হওয়া উচিত তেমন নির্দেশ করে।


স্প্রিংয়ের মূল্যবান পোর্টিং ৩.১ এর জন্য!
young.fu.panda 21

5
@ ডিবিউং এটি সঠিক বলে মনে হচ্ছে না, জাভাদোক producesবলেছেন: "... কন্টেন্ট-টাইপ যদি এই মিডিয়া ধরণের কোনওটির সাথে মেলে তবেই ম্যাপ করা অনুরোধ" " যার অর্থ AFAIK যে producesপদ্ধতিটি কোনও অনুরোধের সাথে মেলে কিনা এবং কীভাবে সামগ্রীটির ধরণের প্রতিক্রিয়া হওয়া উচিত তা নয় তার সাথে প্রাসঙ্গিক।
ইতাই

@ ইটাই সঠিক! পদ্ধতিটি অনুরোধের সাথে মেলে কিনা তা "উত্পাদন করে" তা নির্ধারণ করে তবে প্রতিক্রিয়াতে কোন ধরনের সামগ্রী রয়েছে তা নয়। কী বিষয় নির্ধারণ করতে হবে তা নির্ধারণ করার সময় অবশ্যই অন্য কিছু "উত্পাদন" করা উচিত
anton1980

6

আপনি নিয়ন্ত্রণকারীর কাছ থেকে যে প্রতিক্রিয়া পাঠাচ্ছেন তার ধরণটি নির্দেশ করতে আপনি উত্পাদন ব্যবহার করতে পারেন। এই "উত্পাদিত" কীওয়ার্ডটি আজাক্স অনুরোধে সবচেয়ে কার্যকর হবে এবং এটি আমার প্রকল্পে খুব সহায়ক ছিল

@RequestMapping(value = "/aURLMapping.htm", method = RequestMethod.GET, produces = "text/html; charset=utf-8") 

public @ResponseBody String getMobileData() {

}

4

ধন্যবাদ ডিগজ 66666666, আপনার সমাধানটি আমার জন্য সামান্য পরিবর্তন নিয়ে কাজ করে কারণ আমি জেসন ব্যবহার করছি:

প্রতিক্রিয়াহাইডার্স.এডিডি ("কন্টেন্ট-টাইপ", "অ্যাপ্লিকেশন / জেসন; চরসেট = utf-8");

অ্যাক্সাভ্যাট দ্বারা প্রদত্ত উত্তর (যা আপনি সুপারিশ করেছেন) আমার পক্ষে কাজ করবে না। এমনকি যদি আমি সঠিক মিডিয়া প্রকারটি যোগ করেছি:

যদি (স্ট্রিংএইচটিপিএমেসেজ কনভার্টর উদাহরণস্বরূপ) {                   
                    ((স্ট্রিংএইচটিপিএমেসেজ কনভার্টার) রূপান্তর)। সেটসপোর্টড মিডিয়া টাইপস (
                        Arrays.asList (
                                নতুন মিডিয়াটাইপ ("পাঠ্য", "এইচটিএমএল", চরসেট.ফোর্নাম ("ইউটিএফ -8")),
                                নতুন মিডিয়াটাইপ ("অ্যাপ্লিকেশন", "জসন", চরসেট.ফোর্নাম ("ইউটিএফ -8"))));
                }

4

আমি কনটেন্টনিগোটাইটিংভিউ রিসোলভার শিমের মার্শালিংভিউতে সামগ্রী-প্রকার সেট করেছি । এটি সহজে, পরিষ্কার এবং মসৃণভাবে কাজ করে:

<property name="defaultViews">
  <list>
    <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
      <constructor-arg>
        <bean class="org.springframework.oxm.xstream.XStreamMarshaller" />     
      </constructor-arg>
      <property name="contentType" value="application/xml;charset=UTF-8" />
    </bean>
  </list>
</property>

3

আমি ওয়েব.এক্সএমএল-এ কনফিগার করা ক্যারেক্টার এনকোডিং ফিল্টার ব্যবহার করছি। সম্ভবত এটি সাহায্য করে।

    <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

1
এটি কেবল অনুরোধে চরিত্র ফিল্টার করেছে, প্রতিক্রিয়া হিসাবে নয় - আমি এটি ব্যবহার করে প্রস্তুত
রয়েছি

@ হুরদা: সাথে forceEncoding=true এটি প্রতিক্রিয়াও ফিল্টার করে, তবে এটি এই ক্ষেত্রে আসবে না।
axtavt

এখন পর্যন্ত সেরা এবং দ্রুত উত্তর। আমিও ইতিমধ্যে ঘোষণা এবং এই ফিল্টার ব্যবহার করছিলেন, কিন্তু সঙ্গে forceEncoding=false। আমি কেবল এটিতে সেট করেছি falseএবং "চরসেট = ইউটিএফ -8" সাফল্যের সাথে Content-Typeশিরোনামে যুক্ত হয়েছে ।
সাদ বেনবউজিদ

2

উপরের কেউ যদি আপনার জন্য কাজ না করে "পোষ্ট" নয় "জিইটি" তে অ্যাজাক্স অনুরোধ করার চেষ্টা করে, যা আমার পক্ষে সুন্দরভাবে কাজ করেছে ... উপরের কোনওটিই তা করেন নি। আমার এনকোডিং ফিল্টার চরিত্রটিও রয়েছে।


2
package com.your.package.spring.fix;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * @author Szilard_Jakab (JaKi)
 * Workaround for Spring 3 @ResponseBody issue - get incorrectly 
   encoded parameters     from the URL (in example @ JSON response)
 * Tested @ Spring 3.0.4
 */
public class RepairWrongUrlParamEncoding {
    private static String restoredParamToOriginal;

    /**
    * @param wrongUrlParam
    * @return Repaired url param (UTF-8 encoded)
    * @throws UnsupportedEncodingException
    */
    public static String repair(String wrongUrlParam) throws 
                                            UnsupportedEncodingException {
    /* First step: encode the incorrectly converted UTF-8 strings back to 
                  the original URL format
    */
    restoredParamToOriginal = URLEncoder.encode(wrongUrlParam, "ISO-8859-1");

    /* Second step: decode to UTF-8 again from the original one
    */
    return URLDecoder.decode(restoredParamToOriginal, "UTF-8");
    }
}

আমি এই ইস্যুটির জন্য অনেক চেষ্টা করার পরে .. আমি এটি ভাবলাম এবং এটি ভাল কাজ করে।


2

স্প্রিং ৩.১.১-এ এই সমস্যা সমাধানের সহজ উপায় হ'ল: নিম্নলিখিত কনফিগারেশন কোডগুলিতে যুক্ত করুন servlet-context.xml

    <annotation-driven>
    <message-converters register-defaults="true">
    <beans:bean class="org.springframework.http.converter.StringHttpMessageConverter">
    <beans:property name="supportedMediaTypes">    
    <beans:value>text/plain;charset=UTF-8</beans:value>
    </beans:property>
    </beans:bean>
    </message-converters>
    </annotation-driven>

কিছুতেই ওভাররাইড বা বাস্তবায়ন করার দরকার নেই।


2

যদি আপনি নিম্নলিখিত কনফিগারেশনের মাধ্যমে এই সমস্যাটি সমাধান করার সিদ্ধান্ত নেন:

<mvc:annotation-driven>
  <mvc:message-converters register-defaults="true">
    <bean class="org.springframework.http.converter.StringHttpMessageConverter">
      <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
    </bean>
  </mvc:message-converters>
</mvc:annotation-driven>

আপনার অবশ্যই নিশ্চিত করতে হবে যে আপনার সমস্ত * .xML ফাইলে একটি মাত্র এমভিসি: টিকা-চালিত ট্যাগ থাকা উচিত। অন্যথায়, কনফিগারেশন কার্যকর নাও হতে পারে।


1

লিঙ্ক অনুসারে "যদি একটি অক্ষর এনকোডিং নির্দিষ্ট না করা থাকে তবে সার্লেলেট স্পেসিফিকেশনটির প্রয়োজন ISO-8859-1 এর একটি এনকোডিং ব্যবহার করা উচিত" you প্রতিক্রিয়া সংস্থা
@ রিকোয়েস্টম্যাপিং (মান = "আপনার ম্যাপিং ইউআরএল", = "পাঠ্য / প্লেইন; চরসেট = ইউটিএফ -8" উত্পাদন করে)


0
public final class ConfigurableStringHttpMessageConverter extends AbstractHttpMessageConverter<String> {

    private Charset defaultCharset;

    public Charset getDefaultCharset() {
        return defaultCharset;
    }

    private final List<Charset> availableCharsets;

    private boolean writeAcceptCharset = true;

    public ConfigurableStringHttpMessageConverter() {
        super(new MediaType("text", "plain", StringHttpMessageConverter.DEFAULT_CHARSET), MediaType.ALL);
        defaultCharset = StringHttpMessageConverter.DEFAULT_CHARSET;
        this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
    }

    public ConfigurableStringHttpMessageConverter(String charsetName) {
        super(new MediaType("text", "plain", Charset.forName(charsetName)), MediaType.ALL);
        defaultCharset = Charset.forName(charsetName);
        this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
    }

    /**
     * Indicates whether the {@code Accept-Charset} should be written to any outgoing request.
     * <p>Default is {@code true}.
     */
    public void setWriteAcceptCharset(boolean writeAcceptCharset) {
        this.writeAcceptCharset = writeAcceptCharset;
    }

    @Override
    public boolean supports(Class<?> clazz) {
        return String.class.equals(clazz);
    }

    @Override
    protected String readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException {
        Charset charset = getContentTypeCharset(inputMessage.getHeaders().getContentType());
        return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset));
    }

    @Override
    protected Long getContentLength(String s, MediaType contentType) {
        Charset charset = getContentTypeCharset(contentType);
        try {
            return (long) s.getBytes(charset.name()).length;
        }
        catch (UnsupportedEncodingException ex) {
            // should not occur
            throw new InternalError(ex.getMessage());
        }
    }

    @Override
    protected void writeInternal(String s, HttpOutputMessage outputMessage) throws IOException {
        if (writeAcceptCharset) {
            outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());
        }
        Charset charset = getContentTypeCharset(outputMessage.getHeaders().getContentType());
        FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(), charset));
    }

    /**
     * Return the list of supported {@link Charset}.
     *
     * <p>By default, returns {@link Charset#availableCharsets()}. Can be overridden in subclasses.
     *
     * @return the list of accepted charsets
     */
    protected List<Charset> getAcceptedCharsets() {
        return this.availableCharsets;
    }

    private Charset getContentTypeCharset(MediaType contentType) {
        if (contentType != null && contentType.getCharSet() != null) {
            return contentType.getCharSet();
        }
        else {
            return defaultCharset;
        }
    }
}

নমুনা কনফিগারেশন:

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <util:list>
                <bean class="ru.dz.mvk.util.ConfigurableStringHttpMessageConverter">
                    <constructor-arg index="0" value="UTF-8"/>
                </bean>
            </util:list>
        </property>
    </bean>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.