在没有@JsonFormat的情况下定义@RequestBody实体的日期格式

时间:2017-08-23 17:20:27

标签: spring-mvc spring-boot spring-restcontroller spring-rest

例如,我有以下课程

public class Profile {

    @JsonFormat(pattern = "dd-MM-yyyy")
    private LocalDate dateOfBirth;
    //seter, getter
}

在控制器中,我将此类用作@ResponseBody参数

@RestController
@RequestMapping("/profiles")
public class ProfileController {

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<?> createProfile(@RequestBody Profile newProfile) {
        //...
    }

}

如果我使用以下JSON向/profile发送POST请求,则可以正常运行

{
    "dateOfBirth": "21-01-1985"
}

如果没有使用Profile#dateOfBirth或任何其他注释注释@JsonFormat类,我怎样才能实现此行为?我想将此实体用于不同的日期格式,因此我需要在Profile类之外定义日期格式。

2 个答案:

答案 0 :(得分:0)

使用Jackson自定义反序列化。 有几种方法可以处理它。这个博客似乎有一个很好的答案。 https://www.sghill.net/how-do-i-write-a-jackson-json-serializer-deserializer.html

答案 1 :(得分:0)

您可以使用@JsonProperty("obj-name")。例如

public class Profile {    
    @JsonProperty("dateOfBirth")
    private LocalDate dateOfBirth;
    //seter, getter
}

Json请求将

{
"dateOfBirth": "21-01-1985"
}

@JsonProperty()将直接映射特定的json对象字段。所以现在你可以要求任何日期格式。如果您想最好地验证某些日期格式,建议的方式是Custom Annotation

希望这会非常有帮助......

干杯...