我使用spring-boot和Spring-boot-starter hateoas开发了一个休息服务。我正面临着自定义ObjectMapper的问题。代码如下所示:
Application.java
@Configuration
@Import(BillServiceConfig.class)
@EnableAutoConfiguration
@EnableEurekaClient
@ComponentScan({"com.bill"})
@EnableWebMvc
@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL)
public class Application extends WebMvcConfigurerAdapter{
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.indentOutput(true).dateFormat(new SimpleDateFormat("MM-yyyy-dd"));
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
builder.configure(objectMapper);
return builder;
}
依赖关系:
dependencies {
compile "org.springframework.boot:spring-boot-starter-hateoas"
compile "org.springframework.boot:spring-boot-starter-ws"
compile "org.springframework.boot:spring-boot-starter-actuator"
Bill.java:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonRootName("bills")
public class Bill{
BillController.java:
public ResponseEntity<Resources<Resource<Bill>>> getBills(){
我得到的输出是:
{
_embedded: {
billList:
但我要求“账单”代替“billList”。这是因为ObjectMapper没有得到定制。我错过了任何配置,请在这个问题上帮助我。提前谢谢。
答案 0 :(得分:0)
我使用的是spring-boot 1.5 RC1。如果删除@EnableHypermediaSupport注释,只要在类路径上有java时间模块,spring-boot就应该为你配置带有ISO 8601日期的spring-hateoas。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
无论如何,这对我有用。
如果您想进一步自定义配置,请参阅http://github.com/spring-projects/spring-hateoas/issues/333
上的解决方案答案 1 :(得分:0)
此问题的根源 - 使用Spring MVC的默认ObjectMapper而不是作者配置的ObjectMapper。 这是因为@EnableWebMvc。
通常你会为Spring MVC应用程序添加@EnableWebMvc,但是Spring 当它看到spring-webmvc时,Boot会自动添加它 类路径。
但是如果你说的话,Spring MVC将创建自己的MessageConverters集合并且不会使用你的ObjectMapper。
PS即使我这么晚发布这个答案,也许会帮助别人。