美文网首页java
springboot处理blog字段

springboot处理blog字段

作者: 85年的大喇叭 | 来源:发表于2022-05-08 10:47 被阅读0次

    springboot处理blog字段

    欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章https://www.javaman.cn/

    1、数据库表结构

    其中content为longblob字段,代表存入的内容

    CREATE TABLE `t_post` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `channel_id` int(11) DEFAULT NULL,
      `created` datetime DEFAULT NULL,
      `status` int(11) NOT NULL,
      `summary` varchar(140) COLLATE utf8_bin DEFAULT NULL,
      `tags` varchar(64) COLLATE utf8_bin DEFAULT NULL,
      `title` varchar(64) COLLATE utf8_bin DEFAULT NULL,
      `views` int(11) NOT NULL,
      `weight` int(11) NOT NULL,
      `description` varchar(255) COLLATE utf8_bin DEFAULT NULL,
      `keywords` varchar(255) COLLATE utf8_bin DEFAULT NULL,
      `content` longblob,
      PRIMARY KEY (`id`),
      KEY `IK_CHANNEL_ID` (`channel_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    

    2、创建对应的实体类model

    ==将content内容生命为byte[]类型==

    private byte[] content;

    package com.dsblog.server.model;
    
    import com.baomidou.mybatisplus.annotation.*;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    
    import java.io.Serializable;
    import java.time.LocalDateTime;
    
    /**
     * <p>
     * 
     * </p>
     *
     * @author java大师
     * @since 2022-05-05
     */
    @Data
    @EqualsAndHashCode(callSuper = false)
    @TableName("t_post")
    @ApiModel(value="Post对象", description="")
    public class Post implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value="id")
        @TableId(value = "id", type = IdType.AUTO)
        private Long id;
        @ApiModelProperty(value="栏目")
        @TableField(value = "channel_id")
        private Integer channelId;
        @ApiModelProperty(value="创建时间")
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime created;
        @ApiModelProperty(value="状态")
        private Integer status;
        @ApiModelProperty(value="概要")
        private String summary;
        @ApiModelProperty(value="标签")
        private String tags;
        @ApiModelProperty(value="标题")
        private String title;
        @ApiModelProperty(value="访问次数")
        private Integer views;
        @ApiModelProperty(value="权重")
        private Integer weight;
        @ApiModelProperty(value="描述")
        private String description;
        @ApiModelProperty(value="关键词")
        private String keywords;
        @ApiModelProperty(value="内容")
        @JsonDeserialize(using = PostDeserializer.class)   
        private byte[] content;
    }
    

    3、创建反序列化注释类

    package com.dsblog.server.config;
    
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import java.io.IOException;
    
    public class PostDeserializer extends JsonDeserializer {
        @Override
        public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
            ObjectMapper mapper = (ObjectMapper) jsonParser.getCodec();
            JsonNode textNode = mapper.readTree(jsonParser);
            return textNode.asText().toString().getBytes("UTF-8");
        }
    }
    

    4、修改model类的content,增加注解

    @JsonDeserialize(using = PostDeserializer.class)
    private byte[] content;

    5、添加post信息

    @ApiOperation(value = "添加文章")
    @PostMapping("/")
    public ResultBean addPost(@RequestBody Post post){
        if (postService.saveOrUpdate(post)){
            return ResultBean.success("添加成功");
        }
        return ResultBean.error("添加失败");
    }
    

    6、测试

    1-输入请求参数,点击发送
    image-20220508102740366.png
    2-content已经插入成功
    image-20220508103131918.png

    注意:如果不对content进行反序列化,添加会报如下错误:

    Resolved [org.springframework.http.converter.HttpMessageNotReadableException:
     JSON parse error: Invalid UTF-8 start byte 0xa4; 
    nested exception is com.fasterxml.jackson.databind.JsonMappingException: 
    Invalid UTF-8 start byte 0xa4<LF> at [Source: (PushbackInputStream); line: 3, column: 20] 
    (through reference chain: com.xxxx.model.Post["content"])]
    

    相关文章

      网友评论

        本文标题:springboot处理blog字段

        本文链接:https://www.haomeiwen.com/subject/pnxqurtx.html