Code Bye

Jersey处理POST请求 如果POST包里有中文 则收不到请求

 

POST的包是xml包 如果全部是英文的话处理正常 但是只要xml里存在中文 则直接收不到 xml utf-8编码 wireshark抓包正常 但是服务器返回http 400错误

这种情况应该跟中文没关系吧?我之前用jersey,也有中文,没有你这种问题。
你把代码贴上来看看.
若果你用post 方法串中文就得在前台转下码,后台 接受到在转回来。这样比较麻烦。

你可以直接用 $.ajax ()方法 ,传参直接用“{}”这种 ,不要拼接url, 这样就可以穿中文 ,特殊字符什么的都没问题。

引用 1 楼 dokia123 的回复:

这种情况应该跟中文没关系吧?我之前用jersey,也有中文,没有你这种问题。
你把代码贴上来看看.

@POST
@Produces({MediaType.APPLICATION_XML})
@Consumes({MediaType.APPLICATION_XML})
@Path(value=”saveObject”)
public void save(List<Object> dtos) throws Exception {
service.saveObject(dtos);
}
直接执行不到这个地方。感觉像是JAXB还原对象时出错了,求解……


40分
引用 3 楼 debugmonkey 的回复:
Quote: 引用 1 楼 dokia123 的回复:

这种情况应该跟中文没关系吧?我之前用jersey,也有中文,没有你这种问题。
你把代码贴上来看看.

@POST
@Produces({MediaType.APPLICATION_XML})
@Consumes({MediaType.APPLICATION_XML})
@Path(value=”saveObject”)
public void save(List<Object> dtos) throws Exception {
service.saveObject(dtos);
}
直接执行不到这个地方。感觉像是JAXB还原对象时出错了,求解……

你这里List里面不能写Object吧?要写具体要保存的类型,报的异常是不是跟JAXB相关?

引用 3 楼 debugmonkey 的回复:
Quote: 引用 1 楼 dokia123 的回复:

这种情况应该跟中文没关系吧?我之前用jersey,也有中文,没有你这种问题。
你把代码贴上来看看.

@POST
@Produces({MediaType.APPLICATION_XML})
@Consumes({MediaType.APPLICATION_XML})
@Path(value=”saveObject”)
public void save(List<Object> dtos) throws Exception {
service.saveObject(dtos);
}
直接执行不到这个地方。感觉像是JAXB还原对象时出错了,求解……

还有就是你先测试值保存一个对象,就是这样

public void save(Object dtos) throws Exception {
service.saveObject(dtos);
}

看能不能保存成功,先排除是不是List的问题。然后再继续排除其他问题,想我上面说的那样。

引用 5 楼 dokia123 的回复:
Quote: 引用 3 楼 debugmonkey 的回复:
Quote: 引用 1 楼 dokia123 的回复:

这种情况应该跟中文没关系吧?我之前用jersey,也有中文,没有你这种问题。
你把代码贴上来看看.

@POST
@Produces({MediaType.APPLICATION_XML})
@Consumes({MediaType.APPLICATION_XML})
@Path(value=”saveObject”)
public void save(List<Object> dtos) throws Exception {
service.saveObject(dtos);
}
直接执行不到这个地方。感觉像是JAXB还原对象时出错了,求解……

还有就是你先测试值保存一个对象,就是这样

public void save(Object dtos) throws Exception {
service.saveObject(dtos);
}

看能不能保存成功,先排除是不是List的问题。然后再继续排除其他问题,想我上面说的那样。

Object只是伪代码 现在问题基本确定了 编码问题 如果是GET请求 JAXB返回的xml是UTF-8编码的 但是如果是我POST一个xml 里面有中文 即使xml指定UTF-8 以及HTTP Header ContentType也只定UTF-8编码 JAXB仍然无法根据xml生成对象 如果GBK编码就没问题 但是不想用GBK
现在的问题是
1.能否通过设置、配置,让JAXB解析时自动使用UTF-8,上面代码也不用改动
2.如果上述代码无法实现,即1走不通,那么用
JAXBContext context = JAXBContext.newInstance(class);  
Unmarshaller us = context.createUnmarshaller();
us.unmarshal()
从InputStream读取这样的方法也可。但是问题来了我是希望生成一个List而不是仅仅一个对象。问题是如何生成List呢?
3.退一步说最坏的打算就是xml中可能存在中文的部分base64编码了

问题解了没?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Jersey处理POST请求 如果POST包里有中文 则收不到请求