Удалить имя метода из опубликованного комментария

Я сделал код, который добавляет комментарии к моему локальному хосту: 3000, но при анализе большого количества информации я хочу удалить «commentModel», но если я удалю его из класса CommentRq, я получаю ошибки

пример комментария: { "commentModel": { "comment": "komentarz", "date": "6/03/19 9:34" }, "id": 1}

я хочу, чтобы это было { "comment": "komentarz", "date": "3/6/19 9:34" }, "id": 1 }

КомментарийRq

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class CommentRq {



    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    private CommentModel commentModel;
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    @Builder
    public static class CommentModel {
        @JsonProperty("comment")
        String resourceName;

        @JsonProperty("date")
        String resourceNamed;
    }

}

КомментарийBody

public class CommentBody {

    Date now = new Date();
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public CommentRq RequestCommentBody() {
        return CommentRq.builder()
                .commentModel(new CommentRq.CommentModel(
                        "komentarz",
                        (DateFormat.getInstance().format(now))

                ))
                .build();
    }
}

Здесь я создаю комментарий

Interface.PostComment postComment = Feign.builder()
            .client(new OkHttpClient())
            .encoder(new JacksonEncoder())
            .decoder(new JacksonDecoder())
            .logger(new Slf4jLogger(Interface.PostComment.class))
            .logLevel(Logger.Level.FULL)
            .target(Interface.PostComment.class, "http://localhost:3000/comments/");

    @When("i try to add a comment")
    public void postComment() {
        Map<String, Object> headermap = new HashMap<>();
        headermap.put("Content-Type", "application/json");
        CommentBody requestComment = new CommentBody();
        CommentRes commentRes = postComment.postComment(headermap, requestComment.RequestCommentBody());
        id = commentRes.getId();
        LOGGER.info("Created: " + DateFormat.getInstance().format(now));
    }

Может быть, расскажите нам, какой ошибки вы получаете?

Lino 06.03.2019 11:57

Не удается разрешить метод 'commentModel (testyLocalhost.CommentRq.CommentModel)', когда я удаляю частный CommentModel commentModel; из CommentRq

p0l0 06.03.2019 12:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
31
1

Ответы 1

Вы можете аннотировать свой private CommentModel commentModel с помощью @JsonUnwrapped. Он развернет ваш объект commentModel и запишет его поля в корень json. Это будет обрабатывать ваш конкретный случай. Но вы также можете пересмотреть структуру вашего запроса: поместить поля CommentModel в CommentRq и сопоставить объект CommentModel с объектом CommentRq.

спасибо за ответ, но @JsonUnwrapped не работает, и я не уверен, как сделать вторую вещь, которую вы упомянули, можете ли вы дать мне код?

p0l0 06.03.2019 12:50

Он должен работать. Пожалуйста, удалите аннотацию @JsonProperty и добавьте @JsonUnwrapped.

Mykhailo Hodovaniuk 06.03.2019 13:10

да, это работает, мне нужно было добавить его и в другом месте

p0l0 06.03.2019 13:11

Второй вариант — не вставлять CommentModel объект и иметь CommentRq вот так public class CommentRq { @JsonProperty("comment") String resourceName; @JsonProperty("date") String resourceNamed; }

Mykhailo Hodovaniuk 06.03.2019 13:14

Другие вопросы по теме