示例1
@ResponseBody是作用在办法上的,@ResponseBody表明该办法的回来成果直接写入HTTPresponsebody中,一般在异步获取数据时运用【也便是AJAX】,在运用@RequestMapping后,回来值一般解析为跳转路径,可是加上@ResponseBody后回来成果不会被解析为跳转路径,而是直接写入HTTPresponsebody中。比如异步获取json数据,加上@ResponseBody后,会直接回来json数据。@RequestBody将HTTP恳求正文插入办法中,运用合适的HttpMessageConverter将恳求体写入某个目标。
下面的部分位于Spring-mvc.xml或者dispatcherServlet-servlet.xml中(Spring3.0中ServletName-servlet.xml代替了Spring-mvc.xml)
class=”org.springframework.http.converter.StringHttpMessageConverter”>
text/plain;charset=UTF-8
class=”org.springframework.http.converter.json.MappingJackson2HttpMessageConverter”>
在对应的Controller中:
@RequestMapping(value=”/login”,method=RequestMethod.POST)
public@ResponseBodyUserlogin(Stringusername,Stringpassword){
Useruser=userService.login(username,password);
returnuser;
}
这儿我运用的jackson包:
(1)jackson-core2.5.0
(2)jackson-databind2.5.0
(3)jackson-annotations2.5.0
导入后buildpath;
警告:若用hibernate等orm东西生成的pojo类,1对1,对多等关系可能会输出无限循环的json:
需求运用在pojo类中导入com.fasterxml.jackson.annotation.JsonIgnore,并为需求屏蔽的类增加@JsonIgnore注解,这样被注解的属性就不会出现在json中了。
示例2
@ResponseBody
@RequestMapping(value=”/login”)
publicModelAndViewajaxLogin(Modelmodel,Useruser,HttpServletRequestrequest,HttpSessionsession){
StringerrorMessage=loginCommon(model,user,request,session);
Mapmap=newHashMap();
if(ValueWidget.isNullOrEmpty(errorMessage)){
map.put(Constant2.AJAX_LOGIN_RESULT,”success”);
}else{
map.put(Constant2.AJAX_LOGIN_RESULT,”failed”);
}
map.put(“error”,errorMessage);
model.addAttribute(“user”,null);
returnnewModelAndView(newMappingJacksonJsonView(),map);
}
或者
model.addAttribute(“user”,user1);
json序列化注解
一、json结构
市面上的json结构常用的有jackson、gson、fastjson。大家比较推崇的是fastjson,可是springmvc默认集成的是jackson。
在一个项目中主张一个项目只是用一种json结构。
二、json运用场景
1、mvc
http传输的body虽然是json格局的,但实践还是以串字符串。咱们运用目标接收需求进行json转化。同样,回来给浏览器时在解析成字json格局的符串。
springmvc支持多种json结构,默认jsckson,想要修正jackson。
step1、排除jackson
step2、引进fastjson
step3、重写MappingJackson2HttpMessageConverter,HttpMessageConverter。
2、长途http调用
有时回来结果是String需求转化
3、redis序列化
三、注解
1、留意json注解的运用要和供给注解的json结构对上。比方@JsonProperty(“companId”)是jackson供给的,@JSONField(name=”companId”)是fastjson供给的。如果springmvc运用的结构是jackson,此时在字段上增加@JSONField是无效的。
2、jsckson注解
@JacksonAnnotation
@JacksonAnnotationsInside
@JacksonInject
@JsonAlias
@JsonAnyGetter
@JsonAnySetter
@JsonAutoDetect
@JsonBackReference
@JsonClassDescription
@JsonCreator
@JsonEnumDefaultValue
@JsonFilter
@JsonFormat
@JsonGetter
@JsonIdentityInfo
@JsonIdentityReference
@JsonIgnore
@JsonIgnoreProperties
@JsonIgnoreType
@JsonInclude
@JsonManagedReference
@JsonMerge
@JsonProperty
@JsonPropertyDescription
@JsonPropertyOrder
@JsonRawValue
@JsonRootName
@JsonSetter
@JsonSubTypes
@JsonTypeId
@JsonTypeInfo
@JsonTypeName
@JsonUnwrapped
@JsonValue
@JsonView
3、fastjson注解
@JSONField(name=”companId”)
@JSONCreator
@JSONPOJOBuilder
@JSONType
@FastJsonFilter()
@FastJsonView
@ResponseJSONP
4、顺便说一下java供给的字段校验注解:都来自packagejavax.validation.constraints;包
@AssertFalse
@AssertTrue
@DecimalMax(value=””)
@DecimalMin(value=””)
@Digits(integer=6,fraction=2,message=”{javax.validation.constraints.Digits.message}”)
@Email
@Future
@FutureOrPresent
@Max(1)
@Min(1)
@Negative
@NegativeOrZero
@NotBlank
@NotEmpty
@NotNull
@Null
@Past
@PastOrPresent
@Pattern(regexp=”\w+$”)
@Positive
@PositiveOrZero
@Size
5、packageorg.springframework.data.annotation;
@Transient
@TypeAlias
@AccessType
@AccessType
@Id
@Immutable
@Persistent
@QueryAnnotation
@ReadOnlyProperty
@Reference
@Version