08点睛Spring MVC4.1-Spring MVC的配置(含自定义HttpMessageConverter)

时间:2015-06-01 02:07:09   收藏:0   阅读:792

8.1 配置

8.2 演示

8.2.1 配置路径匹配参数

@RequestMapping("/configPath/{test}")
    public @ResponseBody String configPath(@PathVariable String test){
        return "request value:"+test;
    }

bubuko.com,布布扣

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
         configurer.setUseSuffixPatternMatch(false);
    }

bubuko.com,布布扣

8.2.2 快捷定义ViewController

@RequestMapping("/mytest")
    public String test(){
        return "test";
    }
  @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/mytest").setViewName("/test");
        //添加更多
    }

8.2.3 配置HttpMessageConverter

package com.wisely.domain;

public class Person {

    private String firstName;
    private String lastName;
        public Person(String firstName, String lastName) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}
package com.wisely.converters;

import java.io.IOException;
import java.nio.charset.Charset;

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.StreamUtils;

import com.wisely.domain.Person;

public class WiselyMessageConverter extends AbstractHttpMessageConverter<Person> {

     //自定义媒体类型
    public WiselyMessageConverter(){
        super(new MediaType("application", "x-wisely", Charset.forName("UTF-8")));
    }
    //从request里获得构造Person实例的数据
    @Override
    protected Person readInternal(Class<? extends Person> clazz,
     HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        String temp = StreamUtils.copyToString(inputMessage.getBody(), 

Charset.forName("UTF-8"));
        String[] tempArr = temp.split("-");
        return new Person(tempArr[0],tempArr[1]);
    }

    //只支持Person类
    @Override
    protected boolean supports(Class<?> clazz) {
        return Person.class.isAssignableFrom(clazz);
    }

    //将person实例转换成你想要的字符串格式
    @Override
    protected void writeInternal(Person person, HttpOutputMessage outputMessage) 
                                 throws IOException, HttpMessageNotWritableException {
        String out = "hello:" +person.getFirstName() + "-" + person.getLastName();
        outputMessage.getBody().write(out.getBytes());
    }

}

  @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        WiselyMessageConverter converter = new WiselyMessageConverter();
        converters.add(converter);
    }

注释掉上例的configureContentNegotiation,这里会自动将媒体类型变为text/html

// 配置ContentNegotiationManager,在无后缀名情况下默认为jsp view resolver
//  @Override
//  public void configureContentNegotiation(
//          ContentNegotiationConfigurer configurer) {
//      //忽略请求的header信息,并将contentType置为text/html
//      configurer.ignoreAcceptHeader(true).defaultContentType(
//              MediaType.TEXT_HTML);
//  }
@RequestMapping(value = "/convert", produces = { "application/x-wisely" })
    public @ResponseBody Person convert(@RequestBody Person person) {
        return person;
    }
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div id="resp"></div><input type="button" onclick="req();" value="请求"/>
<script src="js/jquery.js" type="text/javascript"></script>
<script>
    function req(){
        $.ajax({
            url: "convert",
            data: "wang-yunfei",//注意此处的格式
            type:"POST",
            contentType:"application/x-wisely",
            success: function(data){
                $("#resp").html(data);
            }
        });
    }

</script>
</body>
</html>

bubuko.com,布布扣

bubuko.com,布布扣

原文:http://wiselyman.iteye.com/blog/2215737

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!