0

私は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() {
}
}
4

1 に答える 1

0

フィルターは、非常に低レベルのサーブレット API の一部です。Spring MVC はその標準に基づいて構築されています。Spring の連中が POJO を自動的にシリアライズするために作成した便利な機能がすべて得られるわけではありません。必要なコンポーネントを手動で配線することは可能だと思いますが。

Spring MVC の @Valid アノテーションを使用して存在する宣言的検証を確認することをお勧めします: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html#validation-beanvalidation

于 2013-01-25T23:32:49.383 に答える