ajax 호출 뒤 결과 메시지의 한글이 ???로 표기되어 나타날 경우, 여러가지 방법을 사용해 봤다.
사용해 본 결과들에 대해서 몇 가지 정리해보면,
@RequestMapping(value = "/upload")
@ResponseBody
public String upload(MultipartHttpServletRequest req, HttpServletRequest request) throws IOException {
:
:
strResult = URLEncoder.encode(strResult, "UTF-8");
:
:
return strResult;
}
Spring의 Controll 단에서 return 되는 문자에 대해서 URLEncoder.encode를 사용해서 문제를 해결했다.
Client단의 ajax success 부분에 문자를 변환해서 처리함.
var Ca = /\+/g;
var fileInfo = decodeURIComponent(data.replace(Ca, " "));
근데 다른 사람의 브라우저에서는 undefined라는 메시지가 나오면서 ajax 결과가 정상적으로 반영되지 않는 문제를 발견했다.
모든 사람의 브라우저가 다 안되는 것이 아니라 몇 몇 브라우저에서 문제가 발생했다.
charset의 문제로 보여지며 utf-8 이 강제로 iso-8859-1 변환되고 있는 것이 아닌가 싶다.
Spring의 Controll 단에서 utf-8로 강제로 변환해서 처리하고 나니 기존의 오류가 나던 브라우저들도 문제 없이 동작함.
@RequestMapping(value = "/upload", produces = "application/text; charset=utf8")
@ResponseBody
public String upload(MultipartHttpServletRequest req, HttpServletRequest request) throws IOException {
:
:
}
2017년 3월 14일 화요일
2017년 3월 10일 금요일
Spring Framework에서 JavaMailSender로 메일 보내기.
Spring의 JavaMailSender를 추가하기 위해서는 spring-context-support jar 파일을 반드시 lib폴더에 추가해야 한다.
또한 javax.mail 관련 jar 파일도 포함 해야 한다.
maven repository에서 가져올 경우
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${version.spring}</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
상기의 2개를 추가해서 lib폴더에 추가.
아래는 JavaMailSender를 위한 Java Config 설정이다.
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
:
:
@Bean
public static JavaMailSender mailSender() {
JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl();
mailSenderImpl.setHost("smtp.naver.com");
mailSenderImpl.setPort(587);
mailSenderImpl.setUsername("사용자 메일 계정");
mailSenderImpl.setPassword("비밀번호");
mailSenderImpl.setDefaultEncoding("UTF-8");
Properties javaMailProps = new Properties();
javaMailProps.put("mail.smtp.auth", true);
javaMailProps.put("mail.smtp.starttls.enable", true);
mailSenderImpl.setJavaMailProperties(javaMailProps);
return mailSenderImpl;
}
Service로 호출을 하기 위해서 먼저 Interface를 정의한다.
package org.uniworks.groupware.service;
/**
* @author gomoosin
*
*/
public interface EmailSender {
public <T> boolean emailSender(T report);
}
EmailSender를 구현한 클래스는 아래와 같다.
package org.uniworks.groupware.service.internal;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Service;
import org.uniworks.groupware.service.EmailSender;
/**
* @author gomoosin
*
*/
@Service
public class EmailSenderImpl implements EmailSender {
private static final Logger logger = LoggerFactory.getLogger(EmailSenderImpl.class);
@Autowired JavaMailSender javaMailSender;
/* (non-Javadoc)
* @see org.uniworks.groupware.service.EmailSender#emailSender(java.lang.Object)
*/
@Override
public <T> boolean emailSender(T report) {
// TODO Auto-generated method stub
logger.debug("Sending report by email....");
boolean retVal = false;
try {
final String emailTo = "test01@gmail.com";
final String emailFrom = "test01@naver.com";
final String subject = "test subject";
final String message = (String) report;
javaMailSender.send(new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage paramMimeMessage) throws Exception {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(paramMimeMessage, true, "UTF-8");
mimeMessageHelper.setTo(emailTo);
mimeMessageHelper.setFrom(emailFrom);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(message);
/*
final File file = new File("test filename");
mimeMessageHelper.addAttachment(MimeUtility.encodeText("filename"), new InputStreamSource() {
@Override
public InputStream getInputStream() throws IOException {
// TODO Auto-generated method stub
return new FileInputStream(file);
}
});
*/
};
});
retVal = true;
} catch (Exception e) {
logger.error("Can't send email... " + e.getMessage(), e);
}
return retVal;
}
}
위에 만든 Service를 호출해서 테스트한 테스트 케이스는 아래와 같다.
package org.uniworks.groupware.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import org.uniworks.groupware.common.config.AppConfig;
import org.uniworks.groupware.common.config.BoneCPConfig;
/**
* @author gomoosin
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
public class EmailSenderTest {
@Autowired private EmailSender emailSender;
@Test
public void emailSenderTest() {
emailSender.emailSender("text message......");
}
}
또한 javax.mail 관련 jar 파일도 포함 해야 한다.
maven repository에서 가져올 경우
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${version.spring}</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
상기의 2개를 추가해서 lib폴더에 추가.
아래는 JavaMailSender를 위한 Java Config 설정이다.
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
:
:
@Bean
public static JavaMailSender mailSender() {
JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl();
mailSenderImpl.setHost("smtp.naver.com");
mailSenderImpl.setPort(587);
mailSenderImpl.setUsername("사용자 메일 계정");
mailSenderImpl.setPassword("비밀번호");
mailSenderImpl.setDefaultEncoding("UTF-8");
Properties javaMailProps = new Properties();
javaMailProps.put("mail.smtp.auth", true);
javaMailProps.put("mail.smtp.starttls.enable", true);
mailSenderImpl.setJavaMailProperties(javaMailProps);
return mailSenderImpl;
}
Service로 호출을 하기 위해서 먼저 Interface를 정의한다.
package org.uniworks.groupware.service;
/**
* @author gomoosin
*
*/
public interface EmailSender {
public <T> boolean emailSender(T report);
}
EmailSender를 구현한 클래스는 아래와 같다.
package org.uniworks.groupware.service.internal;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Service;
import org.uniworks.groupware.service.EmailSender;
/**
* @author gomoosin
*
*/
@Service
public class EmailSenderImpl implements EmailSender {
private static final Logger logger = LoggerFactory.getLogger(EmailSenderImpl.class);
@Autowired JavaMailSender javaMailSender;
/* (non-Javadoc)
* @see org.uniworks.groupware.service.EmailSender#emailSender(java.lang.Object)
*/
@Override
public <T> boolean emailSender(T report) {
// TODO Auto-generated method stub
logger.debug("Sending report by email....");
boolean retVal = false;
try {
final String emailTo = "test01@gmail.com";
final String emailFrom = "test01@naver.com";
final String subject = "test subject";
final String message = (String) report;
javaMailSender.send(new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage paramMimeMessage) throws Exception {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(paramMimeMessage, true, "UTF-8");
mimeMessageHelper.setTo(emailTo);
mimeMessageHelper.setFrom(emailFrom);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(message);
/*
final File file = new File("test filename");
mimeMessageHelper.addAttachment(MimeUtility.encodeText("filename"), new InputStreamSource() {
@Override
public InputStream getInputStream() throws IOException {
// TODO Auto-generated method stub
return new FileInputStream(file);
}
});
*/
};
});
retVal = true;
} catch (Exception e) {
logger.error("Can't send email... " + e.getMessage(), e);
}
return retVal;
}
}
위에 만든 Service를 호출해서 테스트한 테스트 케이스는 아래와 같다.
package org.uniworks.groupware.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import org.uniworks.groupware.common.config.AppConfig;
import org.uniworks.groupware.common.config.BoneCPConfig;
/**
* @author gomoosin
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
public class EmailSenderTest {
@Autowired private EmailSender emailSender;
@Test
public void emailSenderTest() {
emailSender.emailSender("text message......");
}
}
피드 구독하기:
글 (Atom)