您的位置:首页 > 其它

@responsebody返回乱码 图片上传 hql语句获取数量等问题

2016-04-28 08:45 507 查看
这里我用到的重写一个EageJacksonConverter类继承AbstractHttpMessageConverter类然后在配置文件了填上如下代码加以注入
<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有可能数量不一定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: