Character Encoding กับ CommonsMultipartResolver ใน Spring

เรื่องก็มีอยู่ว่าช่วงนี้ได้มีโอกาสพัฒนางานที่อยู่ในโครงการ OpenCARE โดยได้ลองใช้ extjs ร่วมกับ Spring Framework

ใน application ที่กำลังพัฒนา จะต้องทำการ upload file ไปพร้อมกับการส่งข้อมูลในรูปแบบ text อื่นๆ ดังแสดงในรูปด้านล่าง

ใน extjs ใช้ formpanel สำหรับทำงานนี้ ในตอนที่ยังไม่ได้มีการ upload file การส่งข้อมูลประเภท text field ที่เป็นภาษาไทยไปที่ server ทำงานได้ปกติดี แต่เมื่อใส่ input สำหรับ upload file เข้ามาพบว่าภาษาไทยถูก encode ไม่ถูกต้อง ลอง print ตัวแปรที่รับมาใน Spring controller แล้วข้อมูลภาษาไทยที่ใส่เข้ามากลายเป็นตัวยึกยือ

ลองค้นต่ออีกนิดพบว่าเป็นเรื่องของ Form content types ในกรณีที่มีการ upload file form content type จะถูกเซ็ทเป็นแบบ multipart/form-data แทน application/x-www-form-urlencoded ใน Spring ใช้ CommonsMultipartResolver ในการจัดการข้อมูลแบบ multipart เริ่มเข้าทางแล้วสิ เดาว่าต้นตอน่าจะมาจาก CommonsMultipartResolver เข้าไปดูใน javadoc พบว่า CommonsMultipartResolver มี method setDefaultEncoding ลองใส่ UTF-8 เข้าไป

<bean id="multipartResolver"
         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <property name="defaultEncoding" value="UTF-8"></property>
</bean>

เดาถูกครับ ทำแค่นี้ภาษาไทยที่ใส่เข้าไปก็แสดงผลถูกต้องทันที

6 คิดบน “Character Encoding กับ CommonsMultipartResolver ใน Spring

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s