我在项目中使用了spring boot和post man。在控制器中,我使用了使所有类别看起来像这样的方法:
@GetMapping(value = "/category")
@ResponseStatus(HttpStatus.OK)
public List<ReadableCategory> findAllCategories(@RequestParam(value = "filter", required = false) List<String> filter, MerchantStore store, Language language) {
return categoryService.findCategories(store, 0, language, filter);
}
MerchanStore:
public class MerchantStore implements Auditable {
private final static String DEFAULT_STORE = "DEFAULT";
@Id
@Column(name = "MERCHANT_ID", unique = true, nullable = false)
@TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME",
valueColumnName = "SEQ_COUNT", pkColumnValue = "STORE_SEQ_NEXT_VAL")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
@JsonProperty(
"merchant_id")
private Integer id;
@Column(name = "STORE_NAME", nullable = true, length = 100)
@JsonProperty(value = "store_name")
private String storeName;
@Pattern(regexp = "^[a-zA-Z0-9_]*$")
@Column(name = "STORE_CODE", nullable = true, unique = true, length = 100)
@JsonProperty(value = "merchant_id")
private String code;
@Column(name = "STORE_PHONE", length = 50)
private String storePhone;
@Column(name = "STORE_ADDRESS")
private String storeAddress;
@Column(name = "STORE_CITY", length = 100)
private String storeCity;
@Column(name = "STORE_POSTAL_CODE", length = 15)
private String storePostcode;
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Country.class)
@JoinColumn(name = "COUNTRY_ID", nullable = true)
private Country country;
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Zone.class)
@JoinColumn(name = "ZONE_ID", nullable = true)
private Zone zone;
@Column(name = "STORE_STATE_PROV", length = 100)
private String storeStateProvince;
@Column(name = "WEIGHTUNITCODE", length = 5)
private String wightUnitCode = MeasureUnit.LB.name();
@Column(name = "SEIZEUNITCODE", length = 5)
private String seizeUnitCode = MeasureUnit.IN.name();
@Column(name = "IN_BUSINESS_SINCE")
private LocalDate inBusinessSince = LocalDate.now();
@Transient
private String dateBusinessSince;
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Language.class)
@JoinColumn(name = "LANGUAGE_ID", nullable = false)
private Language defaultLanguage;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "MERCHANT_LANGUAGE")
private List<Language> languages = new ArrayList<>();
//some thing fields and get/set methods
Language.class
@Id
@Column(name = "LANGUAGE_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Embedded
private AuditSection auditSection = new AuditSection();
@Column(name = "CODE", nullable = false)
private String code;
@Column(name = "SORT_ORDER")
private Integer sortOrder;
@OneToMany(mappedBy = "defaultLanguage",targetEntity = MerchantStore.class)
@ToString.Exclude
@JsonIgnoreProperties
private List<MerchantStore> storesDefaultLanguage;
@ManyToMany(mappedBy = "languages",targetEntity = MerchantStore.class,fetch = FetchType.EAGER)
@ToString.Exclude
@JsonIgnoreProperties
private List<MerchantStore> stores = new ArrayList<>();
public String getCode() {
return code;
}
当我向邮递员请求时,其外观如下: http://localhost:8585/api/v1/id=1&storeName=2&code=3&languages=1,2,3
它有效,但是因为当我请求所有字段时,我的班级MerchanStore有很多字段。示例:10字段,我的网址很长很复杂。 我有两个问题:
是否有更好的方法可以发布参数而不将其放在上面 使用GET请求(而非发布请求)的网址。
当我输入id = 1时,因为MerchanStore类包含id和语言
也包含id,它会赋予相同的值1。如何指定特定值
带有ID的MerchanStore和带有ID的语言。
答案 0 :(得分:0)
是否存在一种更好的方法来发布参数,而无需使用GET请求(而不是Post Request)将其放在url上。
不。对请求参数使用GET表示您的URL可以被添加书签。尤其是出于搜索或过滤目的,它非常方便且有用。
当我输入id = 1时,由于类MerchanStore包含id,而语言也包含id,它将相同的值设为1。 带有ID的MerchanStore和带有ID的语言。
对此我一无所知,也许您可以将其发布为新问题。
答案 1 :(得分:0)
您可以使用 @ModelAttribute 。 试试这个:
__gt