SpringMVC那点事

一、SpringMVC返回json数据的三种方式

1、第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew。

  如:<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/> 

  或者<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

  同样要用jackson的jar包。

2、第二种使用JSON工具将对象序列化成json,常用工具Jackson,fastjson,gson。

3、第三种利用spring mvc3的注解@ResponseBody,然后使用spring mvc的默认配置就可以返回json了。

  即return Object 会自动转换成JSON对象。

二、springMVC对于controller处理方法返回值的可选类型

1.ModelAndView

@RequestMapping(method=RequestMethod.GET)
    public ModelAndView index(){
        ModelAndView modelAndView = new ModelAndView("/user/index");//指定viewName
        modelAndView.addObject("xxx", "xxx");
        return modelAndView;
    }

@RequestMapping(method=RequestMethod.GET)
    public ModelAndView index(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("xxx", "xxx");
        modelAndView.setViewName("/user/index");//指定viewName return modelAndView;
    }

  对于ModelAndView构造函数可以指定返回页面的名称,也可以通过setViewName方法来设置所需要跳转的页面;

2.Model

  一个模型对象,主要包含spring封装好的model和modelMap,以及java.util.Map,当没有视图返回的时候视图名称将由requestToViewNameTranslator决定;

3.ModelMap

待续

4.Map

@RequestMapping(method=RequestMethod.GET)
    public Map<String, String> index(){
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "1");
        //map.put相当于request.setAttribute方法
        return map;
    }

   响应的view应该也是该请求的view。等同于void返回。

5.View

  这个时候如果在渲染页面的过程中模型的话,就会给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。

6.String

  对于String的返回类型,笔者是配合Model来使用的。

@RequestMapping(method = RequestMethod.GET)
    public String index(Model model) {
        String retVal = "user/index";
        List<User> users = userService.getUsers();
        model.addAttribute("users", users);
 
        return retVal;
    }

  或者通过配合@ResponseBody来将内容或者对象作为HTTP响应正文返回(适合做即时校验);

@RequestMapping(value = "/valid", method = RequestMethod.GET)
   @ResponseBody
   public String valid(@RequestParam(value = "userId", required = false) Integer userId,
            @RequestParam(value = "logName") String strLogName) {
        return String.valueOf(!userService.isLogNameExist(strLogName, userId));     
    }

  返回字符串表示一个视图名称,这个时候如果需要在渲染视图的过程中需要模型的话,就可以给处理器添加一个模型参数,然后在方法体往模型添加值就可以了。如果返回的是对象则会产生一个默认的视图,然后将返回的对象直接解析成JSON,默认视图+JSON生成正文返回。

7.Void

  当返回类型为Void的时候,则响应的视图页面为对应着的访问地址

@Controller
@RequestMapping(value="/type")
public class TypeController extends AbstractBaseController{
    @RequestMapping(method=RequestMethod.GET)
    public void index(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("xxx", "xxx");
    }
}

  返回的结果页面还是:/type

  这个时候我们一般是将返回结果写在了HttpServletResponse 中了,如果没写的话,spring就会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果这个时候需要模型的话,处理方法和返回字符串的情况是相同的。

三、Jackson json 处理全大写或不规范的JSON

  通过对API的研究可以通过@JsonProperty以及@JsonAutoDetect来实现。

  具体参考:http://energykey.iteye.com/blog/2146445

ALL 
          This pseudo-type indicates that all of real types are included
CREATOR 
          Creators are constructors and (static) factory methods used to construct POJO instances for deserialization
FIELD 
          Field refers to fields of regular Java objects.
GETTER 
          Getters are methods used to get a POJO field value for serialization, or, under certain conditions also for de-serialization.
IS_GETTER 
          "Is getters" are getter-like methods that are named "isXxx" (instead of "getXxx" for getters) and return boolean value (either primitive, or Boolean).
NONE 
          This pseudo-type indicates that none of real types is included
SETTER 
          Setters are methods used to set a POJO value for deserialization.

你可能感兴趣的:(SpringMVC那点事)