似乎charset
在Content-Type
标头中指定属性时,Jersey 2.0(使用Servlet 3.1)无法解码参数。
例如,考虑以下端点:
@POST
@Path("/hello")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response hello(@FormParam("name") String name) {
System.out.println(name);
return ok();
}
此curl请求有效:
curl -X POST -H "content-type: application/x-www-form-urlencoded" -d "name=tom" http://localhost:8080/sampleapp/hello
相反,以下请求 无效 ,并且name
参数为null
:
curl -X POST -H "content-type: application/x-www-form-urlencoded; charset=UTF-8" -d "name=tom" http://localhost:8080/sampleapp/hello
我认为charset=UTF-8
内容类型中的添加会破坏我的代码。
编辑:
我已经打开一张官方票证,以防万一这是一个错误:https :
//java.net/jira/browse/JERSEY-1978
我认为这是一个错误。
打开了一个拉取请求以支持此用例:https :
//github.com/jersey/jersey/pull/24/files
同时,我建议您使用过滤器删除有问题的编码。
*根据OP注释进行 *编辑
我正在考虑以下方面的事情:
@Provider
@PreMatching
public class ContentTypeFilter implements ContainerRequestFilter{
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException {
MultivaluedMap<String,String> headers=requestContext.getHeaders();
List<String> contentTypes=headers.remove(HttpHeaders.CONTENT_TYPE);
if (contentTypes!=null && !contentTypes.isEmpty()){
String contentType= contentTypes.get(0);
String sanitizedContentType=contentType.replaceFirst(";.*", "");
headers.add(HttpHeaders.CONTENT_TYPE, sanitizedContentType);
}
}
}
问题内容: 我试图弄清楚@Consumes在这里如何工作。 我有一个如下所示的简化资源,并且我只希望此资源使用“ application / vnd.myApp + xml”。 我有以下测试用例: 从上面的3个测试中,#2和#3按预期工作。 至于#1,如果我没有设置content-type,为什么它也不会抛出415? 问题答案: 基于@Consumes api(http://jsr311.java
我知道已经有一个关于这个主题的问题,但是在增加价值时,应用程序不起作用 我正在尝试集成Spring和shine,当我添加上下文参数标签来指定应用程序上下文时.xml应用程序将不会加载主页(索引.jsp在webContent文件夹下),如果该标签被重新删除,应用程序加载主页,但thrn i将无法指定spring(应用程序上下文.xml)的配置 这是我的web.xml: 这是我的绒球.xml: 以下是
我有一个Jersey 2.22 rest web服务,我的一个endpoint有以下签名: 我使用PostMan调用这个web服务,在post请求中不传递任何特定的头,我将“query”form param传递为“x-www-form-urlencoded”。 jersey应用程序由Tomcat 7托管,该Tomcat 7以JVM编码UTF-8文件启动。编码UTF-8,并将连接器的URIEncod
Content-Type实体头用于指示所述媒体类型的资源的。 作为响应,Content-Type标题告诉客户实际返回的内容的内容类型。浏览器在某些情况下会执行 MIME 嗅探,并不一定会遵循此标头的值; 为了防止这种行为,X-Content-Type-Options可以将标题设置为nosniff。 在请求(例如POST或PUT)中,客户端通知服务器实际发送了什么类型的数据。 Header type
没有用呢,中文的文件、文件夹仍会报错(malformed input off : 1, length : 1)。 这里都有注释的嘛,为什么会这样?
我想从Java应用程序通过套接字发送一个简单的。我的问题是,如果不在的末尾添加'\n',编写就不起作用。我必须添加这个“\n”还是有更优雅的解决方案? 这是我的代码: