相关疑难解决方法(0)

谁在S​​pring MVC中设置响应内容类型(@ResponseBody)

我在我的Annotation驱动的Spring MVC Java Web应用程序中运行在jetty Web服务器上(目前在maven jetty插件中).

我试图用一个控制器方法做一些AJAX支持,只返回String帮助文本.资源采用UTF-8编码,字符串也是如此,但我的服务器响应是随附的

content-encoding: text/plain;charset=ISO-8859-1 
Run Code Online (Sandbox Code Playgroud)

即使我的浏览器发送

Accept-Charset  windows-1250,utf-8;q=0.7,*;q=0.7
Run Code Online (Sandbox Code Playgroud)

我正在以某种方式使用弹簧的默认配置

我发现了一个提示将这个bean添加到配置中,但我认为它只是没有使用,因为它说它不支持编码,而是使用默认编码.

<bean class="org.springframework.http.converter.StringHttpMessageConverter">
    <property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>
Run Code Online (Sandbox Code Playgroud)

我的控制器代码是(请注意,此响应类型的更改对我不起作用):

@RequestMapping(value = "ajax/gethelp")
public @ResponseBody String handleGetHelp(Locale loc, String code, HttpServletResponse response) {
    log.debug("Getting help for code: " + code);
    response.setContentType("text/plain;charset=UTF-8");
    String help = messageSource.getMessage(code, null, loc);
    log.debug("Help is: " + help);
    return help;
}
Run Code Online (Sandbox Code Playgroud)

java web-applications spring-mvc character-encoding

122
推荐指数
7
解决办法
24万
查看次数

CharacterEncodingFilter不能与Spring Security 3.2.0一起使用

我是Spring MVC框架的新手,我遇到了一个我自己无法解决的问题.一切都是在我将spring security与我的应用程序集成后开始的,之后HTML表单中的所有unicode值都没有编码(spring security工作正常).我得出的结论是,这可能是因为我DelegatingFilterProxy被称为链中的第一个过滤器.

这是我认为可以使用的配置,但它没有:

1)我正在从javadoc扩展AbstractSecurityWebApplicationInitializer:

Registers the DelegatingFilterProxy to use the springSecurityFilterChain() before any
other registered Filter.
Run Code Online (Sandbox Code Playgroud)

从那个类我也覆盖了关于javadoc的SpringSecurityFilterChain方法:

Invoked before the springSecurityFilterChain is added.
Run Code Online (Sandbox Code Playgroud)

所以我认为这将是注册CharacterEncodingFilter的最佳位置:

public class MessageSecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
        FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter());
        characterEncodingFilter.setInitParameter("encoding", "UTF-8");
        characterEncodingFilter.setInitParameter("forceEncoding", "true");
        characterEncodingFilter.addMappingForUrlPatterns(null, true, "/*");
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

我厌倦的另一个选择是通过覆盖getServletFilters()方法通过AbstractAnnotationConfigDispatcherServletInitializer类注册过滤器:

public class WebAppInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    //{!begin addToRootContext}
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { SecurityConfig.class, DatabaseConfig.class, InternationalizationConfig.class };
    }
    //{!end …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-security spring-java-config

33
推荐指数
4
解决办法
2万
查看次数

Spring表单和控制器UTF-8编码不好

我的UTF-8编码有问题.我的webapp使用在我的jsp中正确显示的法语单词,但在POST后不在我的控制器中.例如,在我的jsp中,我有:

Prénomdemonpère

当我发布表单时,控制器得到:

Prénodedemonpère

该characterEncodingFilter是该文件中的第一过滤器如描述此交

这是我的jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!doctype html>
<%@ taglib uri="http://tiles.apache.org/tags-tiles"         prefix="tiles" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"          prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form"   prefix="form" %>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="content-language" content="fr">
    ...
    </head>

    <form:form class="form-horizontal" modelAttribute="AlimentationForm"
    action="${actionUrl}" method="POST">
    ...
         <form:input path="questions" class='input-xlarge' type='text' value='Prénom de mon père'/>
    </form>
Run Code Online (Sandbox Code Playgroud)

我的web.xml:

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/web/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

还有我的application-config.xml

<beans:bean id="messageSource" …
Run Code Online (Sandbox Code Playgroud)

post spring-mvc utf-8 character-encoding hdiv

5
推荐指数
1
解决办法
5092
查看次数