私はSpringDelegatingプロキシフィルターを使用して、Controllerに渡す前にFilterクラスでいくつかの検証を行っています。検証に失敗した場合、ユーザー定義の「ErrorMessage」オブジェクトをjson形式で返すつもりですが、フィルターからjsonを返すための最良の方法は何でしょうか。出来ますか?文字列を出力に書き込んで返してみましたが、うまくいきましたが、オブジェクトを返す方法とそれもjson形式で理解できないようです
コードスニペット:
application context xml -
<bean class="com.company.rest.ValidationFilter" id="validationFilter" />
ValidationFilter -
public class ValidationFilter implements Filter {
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
throws IOException, ServletException {
final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
final HttpServletResponse httpServletResponse = (HttpServletResponse) response;
final String acceptHeader = httpServletRequest.getHeader("Accept");
if (PAYLOAD_FORMATS.jsonp.getContentType().equalsIgnoreCase(acceptHeader)) {
final OutputStream outputStream = httpServletResponse.getOutputStream();
final GenericResponseWrapper wrapper = new GenericResponseWrapper(httpServletResponse);
//Some validation
if (ifValidationFails) {
httpServletResponse.setStatus(400);
httpServletResponse.addHeader("cause", "Required String parameter is not present.");
//Need to return this object in response
final ExceptionWrapper exception = new ExceptionWrapper();
exception.setErrorMessage("Required String parameter is not present");
//Returning string works fine
outputStream.write(new String("Required String parameter is not present").getBytes());
} else {
chain.doFilter(request, wrapper);
outputStream.write(new String("test" + "(").getBytes());
outputStream.write(wrapper.getData());
outputStream.write(new String(");").getBytes());
}
wrapper.setContentType("text/javascript;charset=UTF-8");
outputStream.close();
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}