001/* 002 * Copyright (c) 2010-2024 Mark Allen, Norbert Bartels. 003 * 004 * Permission is hereby granted, free of charge, to any person obtaining a copy 005 * of this software and associated documentation files (the "Software"), to deal 006 * in the Software without restriction, including without limitation the rights 007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 008 * copies of the Software, and to permit persons to whom the Software is 009 * furnished to do so, subject to the following conditions: 010 * 011 * The above copyright notice and this permission notice shall be included in 012 * all copies or substantial portions of the Software. 013 * 014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 020 * THE SOFTWARE. 021 */ 022package com.restfb; 023 024import java.util.Optional; 025 026/** 027 * The POST body class. It uses the RestFB JsonMapper to convert an object to json String. 028 * <p> 029 * You can use your custom mapper to modify the mapping. 030 */ 031public class Body { 032 033 private final String data; 034 035 private Body(Object data) { 036 this(data, new DefaultJsonMapper()); 037 } 038 039 private Body(Object data, JsonMapper jsonMapper) { 040 if (data == null) { 041 throw new IllegalArgumentException(Body.class + " instances" + " must have a non-null data."); 042 } 043 this.data = Optional.ofNullable(jsonMapper) 044 .orElseThrow(() -> new IllegalArgumentException("Provided " + JsonMapper.class + " must not be null.")) 045 .toJson(data, true); 046 } 047 048 /** 049 * returns the Body data as String 050 * 051 * @return the body data 052 */ 053 public String getData() { 054 return data; 055 } 056 057 /** 058 * build a new body object instance with the given data as immutable inner data 059 * 060 * @param data 061 * the data is internally converted into a String using the JsonMapper 062 * @return the Body instance 063 */ 064 public static Body withData(Object data) { 065 return new Body(data); 066 } 067 068 /** 069 * build a new body object instance with the given data as immutable inner data 070 * 071 * @param data 072 * the data is internally converted into a String using the provided JsonMapper 073 * @param jsonMapper 074 * the custom JsonMapper used for the Object to String conversion 075 * 076 * @return the Body instance 077 */ 078 public static Body withData(Object data, JsonMapper jsonMapper) { 079 return new Body(data, jsonMapper); 080 } 081}