我正在尝试隐藏域类中的属性,但它一直出现在输出的JSON中.我正在使用Jackson 2.0和Spring 3.1.1
输出/ users/1:
{"id":1,"password":null,"email":"someone@somewhere.com","firstName":"John","lastName":"Smith"}
Run Code Online (Sandbox Code Playgroud)
我的域名类:
@Entity
public class User {
private String mPassword;
...
@JsonIgnore
public String getPassword() {
return mPassword;
}
public void setPassword(String password) {
mPassword = password;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的springmvc配置:
...
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="favorPathExtension" value="true" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="defaultContentType" value="application/json"/>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
...
Run Code Online (Sandbox Code Playgroud)
而我的控制器:
@Controller
@RequestMapping("/users")
public class UserController {
private UserService mUserService;
public UserController(){}
@Inject
public void setUserController(UserService userService){
mUserService=userService;
}
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public void getUser(@PathVariable("id") long id, Model model){
model.addAttribute(mUserService.getUser(id));
}
}
Run Code Online (Sandbox Code Playgroud)
Eug*_*sky 10
问题是Spring不适用于Jackson 2.0.这已通过以下方式解决:
<bean id="jacksonMessageConverter"
class="own.implementation.of.MappingJacksonHttpMessageConverter"/>
<bean class="org.springframework.web.servlet.mvc
.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
</list>
</property>
<property name="requireSession" value="false"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
而且.MappingJacksonHttpMessageConverter的own.implementation.of基于这个:
但是使用来自Jackson 2.0而不是Jackson 1的ObjectMapper和其他Jackson类.*
除了升级到Spring 3.1.2,您还必须将消息转换器更改为 org.springframework.web.servlet.view.json.MappingJackson**2**HttpMessageConverter
如果您使用的是Spring 4版本,则必须执行以下操作,即更新依赖项
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
将旧的codehaus注释导入替换为以下,如果不这样做,像JsonIgnoreProperties这样的旧注释将无法与新版本的Jackson一起使用
import com.fasterxml.jackson.annotation.*;
Run Code Online (Sandbox Code Playgroud)
从下面删除mediaTypes,它已被弃用.
ContentNegotiatingViewResolver
,不需要,将从激活框架jar中获取,Jackson视图应该使用
MappingJackson2JsonView
<beans:property name="viewResolvers">
<beans:list>
<beans:bean
class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<beans:bean
class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
<beans:property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView"></beans:property>
<beans:property name="order" value="0"></beans:property>
</beans:bean>
</beans:list>
</beans:property>
<beans:property name="defaultViews">
<beans:list>
<beans:bean
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</beans:list>
</beans:property>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15640 次 |
| 最近记录: |