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 ความเห็น

ส่งความเห็นที่ pphetra ยกเลิกการตอบ