@responsebody返回乱码 图片上传 hql语句获取数量等问题
2016-04-28 08:45
507 查看
这里我用到的重写一个EageJacksonConverter类继承AbstractHttpMessageConverter类然后在配置文件了填上如下代码加以注入
网上还有另外两种方法,并没有试过
1在配置文件里如下代码
spring mvc 图片上传
在配置里要写
hql获取数量"select count(* from table)"
用ul做排行 想让页码一直在底部,可以让Ul设定定高,因为li有可能数量不一定
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="com.jsonconvert.EageJacksonConverter" /> </list> </property> </bean>EageJacksonConverter类
package com.jsonconvert; import java.io.IOException; import java.nio.charset.Charset; import org.codehaus.jackson.JsonEncoding; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializerProvider; import org.codehaus.jackson.map.type.TypeFactory; import org.codehaus.jackson.type.JavaType; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.AbstractHttpMessageConverter; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.util.Assert; public class EageJacksonConverter extends AbstractHttpMessageConverter<Object> { public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private ObjectMapper objectMapper = new ObjectMapper(); private boolean prefixJson = false; public EageJacksonConverter() { super(new MediaType("application", "json", DEFAULT_CHARSET)); } public void setObjectMapper(ObjectMapper objectMapper) { Assert.notNull(objectMapper, "'objectMapper' must not be null"); this.objectMapper = objectMapper; } public void setPrefixJson(boolean prefixJson) { this.prefixJson = prefixJson; } public boolean canRead(Class<?> clazz, MediaType mediaType) { JavaType javaType = getJavaType(clazz); return (this.objectMapper.canDeserialize(javaType)) && (canRead(mediaType)); } protected JavaType getJavaType(Class<?> clazz) { return TypeFactory.type(clazz); } public boolean canWrite(Class<?> clazz, MediaType mediaType) { return (this.objectMapper.canSerialize(clazz)) && (canWrite(mediaType)); } protected boolean supports(Class<?> clazz) { throw new UnsupportedOperationException(); } protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { JavaType javaType = getJavaType(clazz); try { return this.objectMapper .readValue(inputMessage.getBody(), javaType); } catch (JsonParseException ex) { throw new HttpMessageNotReadableException("Could not read JSON: " + ex.getMessage(), ex); } } protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { JsonEncoding encoding = getEncoding(outputMessage.getHeaders() .getContentType()); SerializerProvider serializerProvider = this.objectMapper .getSerializerProvider(); serializerProvider.setNullValueSerializer(new JsonSerializer<Object>() { @Override public void serialize(Object arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException, JsonProcessingException { arg1.writeObject(""); } }); JsonGenerator jsonGenerator = this.objectMapper.getJsonFactory() .createJsonGenerator(outputMessage.getBody(), encoding); try { if (this.prefixJson) { jsonGenerator.writeRaw("{} && "); } this.objectMapper.writeValue(jsonGenerator, o); } catch (JsonGenerationException ex) { throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex); } } private JsonEncoding getEncoding(MediaType contentType) { if ((contentType != null) && (contentType.getCharSet() != null)) { Charset charset = contentType.getCharSet(); for (JsonEncoding encoding : JsonEncoding.values()) { if (charset.name().equals(encoding.getJavaName())) { return encoding; } } } return JsonEncoding.UTF8; } }
网上还有另外两种方法,并没有试过
1在配置文件里如下代码
<mvc:annotation-driven /> <mvc:default-servlet-handler /> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"> <property name="defaultEncoding" value="UTF-8" /> <property name="uploadTempDir" value="resources/attach/temp" /> </bean>2 在方法上加 只针对单个方法
@RequestMapping(value="xxx",method=RequestMethod.POST,produces="text/html;charset=UTF-8") @ResponseBody
spring mvc 图片上传
在配置里要写
<!-- 设置multipartResolver才能完成文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5000000000"></property> <property name="defaultEncoding" value="UTF-8" /> </bean>Controller主要代码
public ModelAndView insertFood(Food food, @RequestParam("file") MultipartFile[] files){ ... for (int i = 0; i < files.length; i++) { System.out.println("fileName---------->" + files[i].getOriginalFilename()); if (!files[i].isEmpty()) { int pre = (int) System.currentTimeMillis(); try { String rootPath = request.getServletContext().getRealPath("") + "/upload/"; System.out.println(files[i].getOriginalFilename()); String[] originalFilename = files[i].getOriginalFilename().split("[.]"); String xx = new java.util.Date().getTime() + "." + originalFilename[1]; imgString += xx + ";"; FileOutputStream os = new FileOutputStream(rootPath + xx); if (files[i].getInputStream() instanceof FileInputStream) { FileInputStream in = (FileInputStream) files[i].getInputStream(); int b = 0; while ((b = in.read()) != -1) { os.write(b); } System.out.println(rootPath); os.flush(); os.close(); in.close(); } else { ByteArrayInputStream in = (ByteArrayInputStream) files[i].getInputStream(); int b = 0; while ((b = in.read()) != -1) { os.write(b); } System.out.println(rootPath); os.flush(); os.close(); in.close(); } } catch (Exception e) { e.printStackTrace(); System.out.println("保存失败"); } } }
hql获取数量"select count(* from table)"
用ul做排行 想让页码一直在底部,可以让Ul设定定高,因为li有可能数量不一定
相关文章推荐
- CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用
- 第八周 项目1(2)
- 改进的冒泡排序
- BZOJ 1031
- 第9周-项目2-我的数组类
- Android : The import java.util cannot be resolved
- 实践3
- android轻量级缓存框架ASimpleCache分析
- 第九周实践——阅读程序(3)
- Raspberry Pi3 ~ 安装samba服务
- nyoj 字串和---44
- 我的数组类
- C/C++练习题 (将n(n<20)个数按输入时顺序的逆序排列,用函数实现。)
- 第九周项目三 人数不定的工资类
- 十句程序员大神们的经典语录
- Impala入门笔记
- C++实践参考——深复制体验 3
- CUDA 学习(二)
- iOS开发: iOS蓝牙4.0开发例子
- Android程序员必读之书