告诉我如何实现,以便在使用 swagger 之前,他要求授权?
一个简单的弹簧启动应用程序。
告诉我如何实现,以便在使用 swagger 之前,他要求授权?
一个简单的弹簧启动应用程序。
要求该类可以充当 的键HashMap,为此您需要重写其方法hashcode,equals以便履行这些重写方法之间的约定。问题是该类只有一个 ArrayList 类型的字段。
底漆:
public class ObjectBox {
List collection;
/**
* Instantiates a new Object box.
*/
public ObjectBox() {
this.collection = new ArrayList<>();
}
ObjectBox(final Object[] array) {
collection = Arrays.asList(array);
Collections.sort(collection);
}
/**
* Add a new Element to Collection
*
* @param o the Object
*/
public void add(final Object o){
collection.add(o);
}
/**
* Deletes a given Object
* in existing Data
*
* @param o the Object
*/
public void delete(final Object o){
collection.remove(o);
}
//TODO
@Override
public int hashCode() {
return super.hashCode();
}
//TODO
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
public String toString() {
return super.toString();
}
}
如果我以这种方式覆盖该方法是否正确:
@Override
public int hashCode() {
int result = 31;
result = 17 * result + (collection != null ? collection.hashCode() : 0);
return result;
}
我需要xml标签内的一个属性没有前缀xsi:,为此我找到了一个解决方案来使用xslt。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:apply-templates select="node()|@*" />
</xsl:attribute>
</xsl:template>
效果很好,即使在程序需要没有前缀和没有内容的属性之后也是如此。由于某种原因,前缀和内容都被切断了,只留下一个空属性,例如,您需要从 中删除前缀type:
<out:Declarant xsi:type="out:RequestAccount">
预计会是这样的:
<out:Declarant type="out:RequestAccount">
结果是这样的:
<out:Declarant type="">
我不明白为什么要删除内容?
XML 示例:
<?xml version="1.0" encoding="UTF-8"?>
<out:CoordinateMessage xmlns:out="http://asguf.mos.ru/rkis_gu/coordinate/v6/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<out:CoordinateDataMessage>
<out:Service>
<out:RegNum>136609845</out:RegNum>
<out:RegDate>2018-08-02T11:10:23+03:00</out:RegDate>
<out:ServiceNumber>0001-9000003-0</out:ServiceNumber>
<out:ServicePrice xsi:nil="true"/>
<out:PrepareTargetDate xsi:nil="true"/>
<out:OutputTargetDate xsi:nil="true"/>
<out:Responsible>
<out:LastName>оператор </out:LastName>
<out:FirstName>оператор </out:FirstName>
<out:MiddleName>оператор </out:MiddleName>
<out:JobTitle>оператор Портала</out:JobTitle>
<out:Phone>+7 (495) 5/out:Phone>
<out:Email>cpgu</out:Email>
</out:Responsible>
<out:Department>
<out:Name>Департамент информационных</out:Name>
<out:Code>2043</out:Code>
<out:Inn>70</out:Inn>
<out:Ogrn>943347</out:Ogrn>
<out:RegDate>2010:00:00</out:RegDate>
<out:SystemCode>9003</out:SystemCode>
</out:Department>
<out:CreatedByDepartment>
<out:Name>ПУ</out:Name>
<out:Code>1</out:Code>
<out:Inn>7710878000</out:Inn>
<out:Ogrn>1107746943347</out:Ogrn>
<out:RegDate>2009-11-18T00:00:00</out:RegDate>
<out:SystemCode>1</out:SystemCode>
</out:CreatedByDepartment>
<out:PrepareFactDate>2018-08-</out:PrepareFactDate>
<out:OutputFactDate xsi:nil="true"/>
</out:Service>
<out:SignService Id="ea946206033c1e">
<out:ServiceTypeCode>0201</out:ServiceTypeCode>
<out:Copies>1</out:Copies>
<out:Declarant xsi:type="out:RequestAccount">
<out:FullName>Общество с ограниченной ответств</out:FullName>
<out:Name>ООО "ДК</out:Name>
<out:Ogrn>113772249</out:Ogrn>
<out:OgrnDate xsi:nil="true"/>
<out:Inn>74053</out:Inn>
<out:InnDate xsi:nil="true"/>
<out:PostalAddress/>
<out:FactAddress/>
<out:Phone>(916) 77</out:Phone>
<out:EMail>v@pioneer.ru</out:EMail>
</out:Declarant>
</out:SignService>
有xml,我从“球形真空”中得到它。它有一个带有属性的标签xsi:type:
<out:Declarant xsi:type="out:RequestAccount">
xml还有一个文件描述了这个xsd:
<xs:complexType name="RequestContact">
<xs:extension base="tns:BaseDeclarant">
<xs:sequence>
.................
</xs:sequence>
<xs:attribute name="Id" type="xs:string"/>
<xs:attribute name="xsi:type" type="xs:string"/>
</xs:extension>
这只是同样的问题<xs:attribute name="">- 它不能包含各种字符,例如破折号,即:
<xs:attribute name="name" type="xs:NCName"/>
它的类型是 = NCName,它不希望它name包含无效字符。如何摆脱这个困境?我不能要求他们给我正确的xml或自己更改所有传入的xml或为 xsd 编写我自己的命名空间或什么?告诉我好人。
我的尝试是这样的:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d("qwer", "onTextChanged: " + s + " " + start + " " + before + " " + count);
String originalText = s.toString();
int originalTextLength = originalText.length();
int currentSelection = textHeading.getSelectionStart();
StringBuilder sb = new StringBuilder();
boolean hasChanged = false;
for (int i = 0; i < originalTextLength; i++) {
char currentChar = originalText.charAt(i);
if (isAllowed(currentChar) && i < 21) {
if (i == 0){
String str = "" + currentChar;
str.toUpperCase();
sb.append(str);
}
sb.append(currentChar);
} else {
hasChanged = true;
if (currentSelection >= i) {
textHeading.setError("Please insert current letters");
currentSelection--;
}
}
}
if (hasChanged) {
String newText = sb.toString();
textHeading.setText(newText);
textHeading.setSelection(currentSelection);
}
}
如您所见,我非常愚蠢地检查 i 索引并愚蠢地做了一个 apercase,但它没有按应有的方式工作。但需要用户在输入第一个字母后立即将第一个字母变为大写,然后即使输入大写,反之亦然。问题是,如果你在edittext中联网新数据,那么你会得到一个无限循环,因为监听器被触发并且onTextChanged方法被重新启动,等等无限循环。
有家伙TabLayout和ViewPager,它在一个片段中显示两个片段 有一个带有复选框的项目列表,第二个片段显示第一个列表中的所有选中项目。项目用 显示recyclerview。我将立即显示适配器的摘录:
@Override
public void onBindViewHolder(@NonNull CardViewHolder holder, int position) {
final Card card = cardList.get(position);
holder.imageView.setImageDrawable(holder.imageView.getResources().getDrawable(card.getImage()));
holder.textViewHeading.setText(card.getHeading());
holder.textViewDescription.setText(card.getDescription());
holder.checkBox.setChecked(card.isEnabled());
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
card.setEnabled(b);
}
});
}
当我翻页时,我更新了第二个片段(最喜欢的项目列表)中的数据....:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 0){
DataUtil.refreshChosenList();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
但什么也没发生。我不知道正确地将监听器挂在复选框上?
有一个简单的根主页,每个人都可以看到。但是已经注册或者登录成功的那个,那么你需要把他重定向到下面的URL:HOMEURL/profile/{userId},很明显userId就是用户id。另外,如果未经授权的人只是在 URL 中使用 */profile/{userId} 输入以下地址,spring 也应该请求授权。问题是我不明白如何创建重定向到授权用户的个人资料 URl,并在 URL 的末尾使用他们的 ID。
例如:
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String registration(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) {
userValidator.validate(userForm, bindingResult);
if (bindingResult.hasErrors()) {
return "registration";
}
userService.save(userForm);
securityService.autologin(userForm.getUsername(), userForm.getPasswordConfirm());
return "redirect:/profile/{userId}";
}
从上面可以看出,有必要以某种方式将授权用户的真实 ID 插入到 return 中,而不是 /profile/{userId}。
为什么这一切?我有一个类需要多次执行三个方法,这些方法一个一个执行,我想如果你同时运行它们,那么这应该会增加程序执行的速度,因为它工作得非常慢。(同一个类的所有方法,每个方法单独在自己的线程中)
你好!有一个简单的数组Object[] arr = new int[50],里面填充了一些值,还有另一个数组Object[][][][][] fiveDArr,虽然是5维的,但是你需要把第一个的所有值复制到一个5维数组中,这样就变成了:fiveDArr[arr][arr][arr][arr][arr]
I试过这个:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
for (int n = 0; n < 2; n++) {
for (int m = 0; m < 2; m++) {
System.arraycopy(arr, 0, fiveDArr[i][j][k][n][m], 0, 50);
}
}
}
}
}
不幸的是抓住了 NullPointerException。
有一个牌组(Deck),从中随机发出五张牌。接下来,您需要检查是否存在扑克牌。一切正常,但问题出在发球台上。确定发球台本身并不难,问题是我必须知道哪些牌构成发球台,从我的实施来看,不可能考虑第一张牌,因此该方法只给出满堂彩和四个种类。
public boolean isThreeOfKind() {
ArrayList<Card> cardsToZero = new ArrayList<>();//сюда кладутся карты тройника
HashSet<String> rankKeys = new HashSet<>();
for (Card c : cards) {
/*1.берем ранг карты
*2.если есть такой же ранг откладываем в лист cardsToZero
*3. если нет то в rankKeys
4.повторяем. если cardstozero будет = 3 то это точно тройник*/
if (rankKeys.contains(c.getStringRank())) {
cardsToZero.add(c);
} else {
rankKeys.add(c.getStringRank());
}
if (cardsToZero.size()==3){
//int rezultZero = cardsToZero.get(0).getRank();
//rezultZero = getTotal() - rezultZero*3;
//System.out.println("from method rezult :" + rezultZero);
return true;
}
}
return false;
}
这是卡片类
public class Card {
private Suit suit;
private Rank rank;
//private StraightRank straightRank;
public Card(Rank rank, Suit suit){
this.rank = rank;
this.suit = suit;
// this.straightRank = straightRank;
}
public String printRank(){
return rank.getStringRank();
}
public String getSuit(){
return suit.getSuit();
}
public int getRank(){
return rank.getRank();
}
public String getStringRank(){
return rank.getStringRank();
}
public String toString(){
String str = "";
str += rank.getStringRank() + suit.getSuit();
return str;
}
}
好的。从第一次了解封装及其数据隐藏属性开始,我仍然无法理解一点:标有修饰符的类字段private对其他类不可用——这一点很清楚。
比方说:
public class Solution {
public static void main(String[] args) {
}
public class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) { // этот метод противоречит принципам инкапсуляции
this.name = name;
}
}
}
当我们调用方法setName("Васька")时,它会改变字段的值吗?如果是这样,那对我来说不是很清楚。我的意思是:如果我们用访问修饰符标记字段会有什么不同private?如果我们通过 setter 访问它并根据需要更改它的值?